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

时间:2018-09-17 15:55:36

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

我在我的react应用程序中使用AWS Amplify调用具有AWS_IAM授权的API网关中托管的API。当我将授权设置为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正确执行了签名过程。我将这些密钥从检查器中拉出到POSTMAN中,并尝试获取。这些凭据无效,并且收到以下错误消息:

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

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

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

我已经花了3天的时间解决这个问题,并且基本上尝试了所有方法...关于它为什么不起作用的任何想法?

P.S。许多人建议在调用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
      }
    ]
  }
});``

1 个答案:

答案 0 :(得分:0)

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

由于我设置了具有IAM授权的OPTIONS,因此OPTIONS方法随后在没有我的凭据的情况下针对带有该请求的IAM进行了检查。这就是为什么我收到“缺少身份验证令牌”的原因。

相关问题