为什么我不能让 Amazon Cognito 接受来自 Google+ 的令牌?

Why can't I get Amazon Cognito to accept a token from Google+?

我通过 javascript.

在网页中执行所有操作

首先,我将用户发送至 Google,以便他们授予访问权限:

    https://accounts.google.com/o/oauth2/auth?response_type=token&scope=profile&redirect_uri=https://example.com/&client_id=1414xxxxxxxx-{myclientid}.apps.googleusercontent.com

授予访问权限后,他们被重定向回我的网站,内容如下:

    https://example.com/#access_token={their_token}&token_type=Bearer&expires_in=3600

然后我将这些信息提供给亚马逊,如下所示:

    // Initialize the Amazon Cognito credentials provider
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: 'us-east-1:{my-pool-id}',
            Logins: {
                'accounts.google.com': "{their_token}"
            }
    });
    AWS.config.region = 'us-east-1';

    AWS.config.credentials.get(function(err) {
        if ( err ) {
            console.log(err);
        }
        else {
            console.log("ID: "+identityId:AWS.config.credentials.identityId);
        }
    }); 

而且我总是在控制台中出现错误:

"Error: Invalid login token."

身份池 'us-east-1:{my-pool-id}' 在我的 Amazon 控制台中设置,身份验证提供程序 'Google+' 设置和 Google 客户端 ID 匹配 google url(即 1414xxxxxxxx-{myclientid}。apps.googleusercontent.com)。

我也尝试将参数中的 AccountIdRoleArn 设置为 CognitoIdentityCredentials,但在这种情况下没有帮助。 我是否正确使用了 Logins 参数?我错过了什么?

如果我取出 Logins 参数或将其设置为空对象,我会得到一个 identityId,我认为它与未验证的角色相关联。 如何使用 Google API 作为令牌提供者获得具有经过身份验证的角色的身份?

您需要使用 id_token 而不是 access_token。有关获得 id_token 的更多详细信息,请参阅本文档:OpenIDConnect