为什么我不能让 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)。
我也尝试将参数中的 AccountId
和 RoleArn
设置为 CognitoIdentityCredentials,但在这种情况下没有帮助。 我是否正确使用了 Logins
参数?我错过了什么?
如果我取出 Logins
参数或将其设置为空对象,我会得到一个 identityId
,我认为它与未验证的角色相关联。 如何使用 Google API 作为令牌提供者获得具有经过身份验证的角色的身份?
您需要使用 id_token 而不是 access_token。有关获得 id_token 的更多详细信息,请参阅本文档:OpenIDConnect
我通过 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)。
我也尝试将参数中的 AccountId
和 RoleArn
设置为 CognitoIdentityCredentials,但在这种情况下没有帮助。 我是否正确使用了 Logins
参数?我错过了什么?
如果我取出 Logins
参数或将其设置为空对象,我会得到一个 identityId
,我认为它与未验证的角色相关联。 如何使用 Google API 作为令牌提供者获得具有经过身份验证的角色的身份?
您需要使用 id_token 而不是 access_token。有关获得 id_token 的更多详细信息,请参阅本文档:OpenIDConnect