AWS Cognito - JavaScript身份验证不起作用

时间:2015-10-19 14:52:41

标签: javascript amazon-web-services google-oauth amazon-cognito

我一直在努力让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);

 });

3 个答案:

答案 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)

确保您在AWS-&gt; Cognito-&gt; UserPool-&gt; YourPool-&gt; Apps-&gt;添加应用中取消选中'生成客户端密码' enter image description here