【问题标题】:AWS Amplify React GET request error - missing authentication tokenAWS Amplify React GET 请求错误 - 缺少身份验证令牌
【发布时间】:2019-02-21 14:37:23
【问题描述】:

我在我的 react 应用程序中使用 AWS Amplify 来调用我在 API Gateway 中托管的 API,并获得 AWS_IAM 授权。当我将授权设置为 NONE 时,我的 react 应用程序一切正常。

但是,当我将授权设置为 AWS_IAM 并使用 Amplify 中的 API.get() 执行我的 API 时,如下代码所示:

const notes = await API.get('notes', '/notes', init);

我收到如下错误消息:

{
    "message": "Missing Authentication Token",
    "err": "missing auth"
}

所以我尝试使用 aws-api-gateway-cli-test 来测试我的 API 网关。通过该脚本,我能够获得有效的凭证、获得身份验证和正确的响应。我还使用我的管理员凭据尝试了 POSTMAN,它也能正常工作。

在做了一些研究后,我看到有人将此称为 CORS 问题。我已经仔细检查了我的 API 网关设置并确认我已启用 CORS。同样的问题仍然存在。

通过 aws-amplify 的调试功能,我能够在我的 Chrome 检查器中看到签名过程。使用一些 accessKey 和 secretKey 正确执行了签名过程。我把那些钥匙从检查器里拉到我的邮递员身上,然后试图拿到。

这些凭据无效,我收到以下错误消息:

{
    "message": "The security token included in the request is invalid.",
    "err:": "default"
}

更新:我忘记将会话令牌复制到 POSTMAN 中。现在,使用我的应用程序生成的所有凭据,我可以从我在 POSTMAN 中的 API 获得正确的结果。只是不在我的应用中。

在这一点上,对我来说很明显这是一个身份验证问题。但是,我一直在使用 aws-amplify 进行登录和获取过程。可以肯定的是,签名过程是通过幕后放大完成的。

我在这个问题上花了 3 天时间,基本上什么都试过了……关于为什么它不起作用有什么想法吗?

附:很多人认为调用 URL 中的拼写错误可能会导致此问题。我已经仔细检查过,没有错字。下面是我的放大配置代码:

Amplify.configure({
    Auth: {
        mandatorySignIn: true,
        region: config.cognito.REGION,
        userPoolId: config.cognito.USER_POOL_ID,
        identityPoolId: config.cognito.IDENTITY_POOL_ID,
        userPoolWebClientId: config.cognito.APP_CLIENT_ID
    },
    Storage: {
        region: config.s3.REGION,
        bucket: config.s3.BUCKET,
        identityPoolId: config.cognito.IDENTITY_POOL_ID
    },
    API: {
    endpoints: [
        {
            name: "notes",
            endpoint: config.apiGateway.URL,
            region: config.apiGateway.REGION
        }
    ]
    }
});

【问题讨论】:

  • Cognito 池需要一个身份池来指定具有从 Cognito 身份池获得的临时凭证的用户可以访问哪些 AWS 资源。此身份池必须将您的用户池作为经过身份验证的身份,并带有允许其调用 API 网关的策略。你能确认这设置正确吗? - 听起来好像是……只是想检查一下:)
  • @KiteCoder 感谢您的评论,我的设置很好。我刚刚解决了我的问题。我在 API Gateway 中的 Resources 下将 OPTIONS 方法授权为 AWS_IAM。但是,当我的浏览器发送请求时,它会首先向 OPTIONS 发送一个请求,以检查某些没有此请求中凭据的标头。由于我使用 IAM 授权设置了 OPTIONS,因此 OPTIONS 方法随后在没有我的凭据的情况下使用此请求检查了 IAM。这就是我收到“缺少身份验证令牌”的原因。

标签: amazon-web-services aws-api-gateway amazon-cognito aws-amplify


【解决方案1】:

刚刚解决了我的问题 - 我已将 OPTIONS 方法的授权设置设置为 API Gateway 中资源下的 AWS_IAM。但是,当我的浏览器发送请求时,它会首先向 OPTIONS 发送一个请求,以检查某些没有此请求中凭据的标头。

由于我使用 IAM 授权设置了 OPTIONS,因此 OPTIONS 方法随后在没有我的凭据的情况下使用此请求检查了 IAM。这就是我收到“缺少身份验证令牌”的原因。

【讨论】:

  • 解决办法是什么?
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多