0

Ich arbeite an einer App, die es Benutzern ermöglicht, sich mit ihrem Google-Konto anzumelden und diese Anmeldung dann zu verwenden, um eine Cognito-Verbundidentität zu erhalten.Cognito Google Federated Identität, ungültig OpenId Connect Identitäts-Token

Ich bin nicht in der Lage, das richtige Token zur Authentifizierung mit Cognito zu erhalten. Ich halte den Fehler immer com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: Invalid login token. Not a valid OpenId Connect identity token.

Hier ist mein Code:

 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();

Antwort

1

GoogleAuthUtil des getToken scheint eine Access-Token zurück.

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)

Sie benötigen passieren OpenId Connect ID-Token zu Cognito von Google und nicht Zugriffstoken.

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

+0

Vielen Dank! Ich würde dir 100 Stimmen geben, wenn ich könnte! – Reid

0

Basierend auf Javascript Pass-google-Auth-Modul, gibt es access_token, refresh_token und params.

für das Erhalten cognito_identity Sie benötigen params.id_token zu verwenden, die von 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"] 
    } 
Verwandte Themen