我一直在努力让Google Sign-In通过JS SDK与Cognito合作。我一直在阅读文档:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html
以下代码在我的函数中,一旦我从Google收到回调就会运行。我已经确认我已通过Google登录并拥有access_token。根据文档我只需要角色名称,如果角色是通过cognito配置的,那么它可以自动找出池ID。它是什么。该函数调用get并成功返回。
现在我不明白的是两件事:
1)一旦调用get方法,我不应该在Cognito的池中看到新的身份吗?我没有通过cognito看到任何登录。我应该何时在仪表板上看到通过cognito登录?
2)现在尝试使用AWS来访问特定资源,例如可能读取S3存储桶或由于Auth而失败的事情,如果问题#1出现问题,这将是有意义的。
我猜我错过了一些简单的东西,因为,任何帮助将不胜感激。我也查看了这个链接:http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring.html并尝试使用WebIdentityToken,但没有成功。
AWS.config.region = 'us-east-1';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: '<POOL ID>',
Logins: {
'accounts.google.com': googleUser.wc.access_token
}
});
// Obtain AWS credentials
AWS.config.credentials.get(function(){
// Credentials will be available when this function is called.
var accessKeyId = AWS.config.credentials.accessKeyId;
var secretAccessKey = AWS.config.credentials.secretAccessKey;
var sessionToken = AWS.config.credentials.sessionToken;
console.log("accessKeyId: " + accessKeyId);
});
答案 0 :(得分:1)
所以问题归结为两件事。
就像Scott说我需要在CognitoIdentityCredentials方法中使用IdentityPoolId和Logins。
第二个是来自谷歌的令牌。它不是AWS需要的访问令牌,它是id_token!所以在google成功回调中,我们得到了googleUser对象,其上有一个wc对象,其中包含一个id_token。您可以在登录词典中使用该令牌,并自己成功登录!
答案 1 :(得分:0)
您实际上需要指定标识池ID,而不是角色ARN(只要您在设置标识池时配置了UnAuth和Auth角色 - 这是默认设置)。请参阅http://docs.aws.amazon.com/cognito/devguide/identity/getting-credentials/
上的示例代码如果您继续遇到麻烦,请告诉我们。
答案 2 :(得分:0)