首页 文章

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

提问于
浏览
2

我在我的反应应用程序中使用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”:“请求中包含的安全令牌无效 . ”,“错误:”:“默认”}

Update: 我忘了将会话令牌复制到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
      }
    ]
  }
});``

1 回答

  • 0

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

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

相关问题