AWS Amplify React GET请求错误 - 缺少身份验证令牌

问题描述 投票:2回答:1

我在我的反应应用程序中使用AWS Amplify通过AWS_IAM授权调用我在API网关中托管的API。当我将授权设置为NONE时,我的反应应用程序中的一切正常。

但是,当我将权限设置为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正确执行。我将那些钥匙从检查员身上拉进我的POSTMAN并试图得到。 这些凭据无效,我收到以下错误消息:

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

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

在这一点上,我很明显这是一个auth问题。但是,我一直在使用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
      }
    ]
  }
});``
amazon-web-services aws-api-gateway amazon-cognito aws-amplify
1个回答
0
投票

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

由于我使用IAM授权设置了OPTIONS,因此OPTIONS方法在没有我的凭据的情况下使用此请求针对IAM进行了检查。这就是我收到“Missing Authentication Token”的原因。

© www.soinside.com 2019 - 2024. All rights reserved.