Cognito Google Federated Identity, недействительный токен идентификации OpenId Connect

Я работаю над приложением, которое позволяет пользователям входить в систему, используя свою учетную запись Google, а затем использовать этот логин для получения федеративного удостоверения Cognito.

Я не могу получить правильный токен, необходимый для аутентификации в Cognito. Я продолжаю получать ошибку com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: Invalid login token. Not a valid OpenId Connect identity token.

Вот мой код:

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


person Reid    schedule 23.10.2017    source источник


Ответы (2)


GetToken GoogleAuthUtil, похоже, возвращает токен доступа.

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 Connect Id в Cognito, а не токен доступа.

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

person patanjal    schedule 23.10.2017
comment
Большое спасибо! Я бы дал вам 100 голосов, если бы мог! - person Reid; 24.10.2017
comment
Спасибо, использование id_token вместо access_token решило проблему. - person Omar Dulaimi; 08.10.2020

Основываясь на модуле паспорта-google-auth Javascript, он возвращает access_token, refresh_token и params.

для получения cognito_identity нужно использовать params.id_token полученный от 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"]
    }
person hashed_name    schedule 27.02.2018
comment
Похоже, это больше не работает с паспортом. В функцию обратного вызова не передается объект params. Есть ли другой способ получить токен OpenID? Имея проблемы с получением этого. - person Andrew Hummel; 25.06.2019
comment
@AndrewHummel: у меня была такая же проблема, и я нашел ответ здесь: github.com/jaredhanson/passport-google-oauth/issues/. TLDR; вы можете добавить параметр и получить указанный params объект - person eak12913; 10.07.2019