在服务器端验证时,来自google_sign_in插件的令牌无效

问题描述 投票:1回答:2

请尝试使用插件google_sign_in plugin在我的flutter应用程序上实现社会认证。它在客户端正常工作,并检索用户的帐户详细信息。 我的问题是我想将用户保存在我的数据库中,所以我需要验证服务器端的id_token。我尝试使用服务器端的google API库执行此操作,如here所示,但我键获取无效的令牌结果。我最终决定尝试tokeninfo端点https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=<my_token>,它应该返回200响应,其中包含用户详细信息和其他信息,但我得到了400响应的身体{"error_description": "Invalid Value"}。 我用jwt.io解码了令牌,以确保它不是一个过期的令牌,令牌仍然非常有效。

这是我在flutter上用来获取id_token的google_sign_in代码。

GoogleSignIn _googleSignIn = new GoogleSignIn(
    scopes: <String>[ 
      'profile',
      'email',
      'https://www.googleapis.com/auth/contacts.readonly',
    ],
  );

  Future<Null> _handleSignIn() async {
    try {
      _googleSignIn.signIn().then((result){
          result.authentication.then((googleKey){
              print(googleKey.accessToken);
              print(googleKey.idToken);
              print(_googleSignIn.currentUser.displayName);
          }).catchError((err){
            print('inner error');
          });
      }).catchError((err){
          print('error occured');
      });
      print('signed in .....');
    } catch (error) {
      print(error);
    }
  } 

如有任何帮助,将不胜感激。

dart flutter google-signin
2个回答
0
投票

在文档google_sign_in中,他们有IOS的详细信息,但在Android中他们错过了这些步骤:

classpath'com.google.gms:google-services:4.2.0'

在根“build.gradle”中的依赖项中

申请插件:'com.google.gms.google-services'

在你的“app / build.gradle”底部

实施“com.google.gms:google-services:4.2.0”

在“app / build.gradle”中的依赖项

  1. 转到您的firebase控制台,下载

谷歌,services.json

并将其复制到目录“app /”

完成所有这些步骤后,您可以运行并获得idToken正常


0
投票

事实证明,令牌始终有效。令牌在命令行上被截断并变为无效。 我现在测试有效性的方法是使用HTTP包来测试而不必复制令牌。 例如。

 Dio dio = new Dio();
 Response response = await dio.get('https://www.googleapis.com/oauth2/v1/tokeninfo?id_token='+googleKey.idToken);
 print(response.data); //contains the token info
© www.soinside.com 2019 - 2024. All rights reserved.