【问题标题】:AWS Cognito - JavaScript Authentication Not WorkingAWS Cognito - JavaScript 身份验证不起作用
【发布时间】:2016-01-17 23:40:05
【问题描述】:

我一直在尝试让 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 存储桶或由于身份验证而失败,如果问题 #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);

 });

【问题讨论】:

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


    【解决方案1】:

    所以问题归结为两件事。

    就像 Scott 说的我需要在 CognitoIdentityCredentials 方法中使用 IdentityPoolId 和 Logins。

    第二个是来自谷歌的令牌。它不是 AWS 需要的访问令牌,而是 id_token!因此,在 google 成功回调中,我们得到了 googleUser 对象,它上面有一个 wc 对象,它包含一个 id_token。您在 Logins 字典中使用该令牌,您就成功登录了!

    【讨论】:

      【解决方案2】:

      您实际上需要指定身份池 ID,而不是角色 ARN(只要您在设置身份池时配置了 UnAuth 和 Auth 角色 - 这是默认设置)。请参阅http://docs.aws.amazon.com/cognito/devguide/identity/getting-credentials/的示例代码

      如果您仍有问题,请告诉我们。

      【讨论】:

      • 我也试过了,我对上面的代码进行了更改,但是在 JS SDK 中返回了 400。即使我删除 Logins 映射,SDK 仍然有 400。
      • 请提供您在 400 之外看到的详细错误消息。同时确保您使用的是来自 Google 的 ID 令牌,如 docs.aws.amazon.com/cognito/devguide/identity/… 所示
      • 它是 400 - 错误请求。但是有了你的评论,我能够挖掘更多,这帮助我找到了答案!我将在下面提供答案。感谢斯科特的帮助!
      【解决方案3】:

      确保您在 AWS->Cognito->UserPool->YourPool->Apps->Add App 上未选中“生成客户端密码”

      【讨论】:

        猜你喜欢
        • 2018-01-29
        • 2017-01-02
        • 2016-06-25
        • 1970-01-01
        • 2018-05-22
        • 2015-12-07
        • 2023-04-03
        • 1970-01-01
        • 2016-12-22
        相关资源
        最近更新 更多