簡體   English   中英

在服務器端驗證時來自 google_sign_in 插件的無效令牌

[英]Invalid token from google_sign_in plugin when verifying on server side

請我嘗試使用插件google_sign_in 插件在我的 flutter 應用程序上實現社交身份驗證。 它在客戶端正常工作並檢索用戶的帳戶詳細信息。
我的問題是我想將用戶保存在我的數據庫中,所以我需要驗證在服務器端獲得的id_token 我試圖在如圖所示的服務器端的谷歌API庫這樣在這里,但我越來越關鍵的無效令牌的結果。 我最終決定嘗試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);
    }
  } 

請任何幫助將不勝感激。

事實證明,這些令牌一直都是有效的。 令牌在命令行上被截斷並變得無效。
我現在測試有效性的方式是使用HTTP包進行測試,無需復制token。
例如。

 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

在文檔 google_sign_in 中,他們有 IOS 的詳細信息,但在 Android 中,他們缺少這些步驟:

  1. 添加

類路徑 'com.google.gms:google-services:4.2.0'

在根“build.gradle”的依賴項中

  1. 添加

應用插件:'com.google.gms.google-services'

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

  1. 添加

實現“com.google.gms:google-services:4.2.0”

在“app/build.gradle”的依賴項中

  1. 轉到您的 Firebase 控制台,下載

google-services.json

並將其復制到目錄“app/”

完成所有這些步驟后,您可以運行並獲得 idToken 正常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM