0

ユーザーがGoogleアカウントを使用してログインできるようにするアプリを開発しており、そのログイン情報を使用してCognitoフェデレーションIDを取得しています。Cognito GoogleのフェデレーションID、無効なOpenId Connect IDトークン

Cognitoで認証するのに必要な正しいトークンを取得できません。

 Runnable runnable = new Runnable() { 
 
      @Override 
 
      public void run() { 
 
       CognitoSyncClientManager.init(getActivity().getApplicationContext()); 
 

 
       String token = null; 
 

 
       try { 
 
        token = GoogleAuthUtil.getToken(getActivity().getApplicationContext(), signInAccount.getAccount(), "oauth2:openid"); 
 
       }catch (Exception e){ 
 
        Log.d("login exception", e.toString()); 
 
       } 
 
       Map<String, String> logins = new HashMap<String, String>(); 
 
       logins.put("accounts.google.com", token); 
 
       CognitoSyncClientManager.addLogins("accounts.google.com", token); 
 
       Log.d("login", "Created User token " + token); 
 
       Log.d("login", "Cached UserID: "+CognitoSyncClientManager.credentialsProvider.getCachedIdentityId()); 
 
       Log.d("login", "UserID: " + CognitoSyncClientManager.credentialsProvider.getIdentityId()); 
 
       Toast.makeText(getActivity().getApplicationContext(), "Created user: "+CognitoSyncClientManager.credentialsProvider.getCachedIdentityId(), Toast.LENGTH_LONG); 
 
      } 
 
     }; 
 
     Thread t = new Thread(runnable); 
 
     t.start();

答えて

1

GoogleAuthUtilの入手トークンはアクセストークンを返すようだ:私はエラーここcom.amazonaws.services.cognitoidentity.model.NotAuthorizedException: Invalid login token. Not a valid OpenId Connect identity token.

を得続けることは私のコードです。

https://developers.google.com/android/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context、android.accounts.Account、java.lang.Stringで、android.os.Bundle)

はGoogleのOpenIDでの接続IDがCognitoへのトークンではなくアクセストークンを渡す必要があります。 Javascriptのパスポート - グーグル - 認証モジュールに基づいて

https://developers.google.com/identity/sign-in/android/backend-auth

+0

はどうもありがとうございます!もし私ができるなら、私はあなたに100議席以上の投票権を与えるでしょう! – Reid

0

、それはaccess_tokenは、refresh_token、とのparamsを返します。あなたがparams.id_tokenを使用する必要がcognito_identityを取得するための

をGoogle

から受信
passport.use(new GoogleStrategy(googleDeveloperDetails, getUserDetails)); 

    app.get("/auth/google", passport.authenticate("google", { scope: ['email'] })); 

    var authGoogle = passport.authenticate("google", { 
     failureRedirect: "/auth/google" 
    }); 

    app.get("auth/google/callback", authGoogle, controller.successRedirect); 

    getUserDetails = function(accessToken, refreshToken, params, profile, done) { 
      if(profile.provider == "google") { 
      profile.token = params.id_token // params.id_token to be used to get cognito credentials 
      } else { 
       profile.token = accessToken; 
      } 
      done(null, profile); 
    } 

    googleDeveloperDetails = { 
     clientID: "google cleint ID", 
     clientSecret: "google client secret", 
     callbackURL: "https://localhost:3000/auth/google/callback", 
     profileFields: ["emails", "profile"] 
    } 
関連する問題