我在我的react应用程序中使用AWS扩容来使用AWS_IAM授权来调用我在API中托管的API。当我将授权设置为NONE时,在我的react应用程序中一切都很好。
但是,当我将授权设置为AWS_IAM
并使用API.get()
从API.get()
执行API时,如下所示:
const notes = await API.get('notes', '/notes', init);
我收到一条错误消息,比如:
{
"message": "Missing Authentication Token",
"err": "missing auth"
}
因此,我尝试使用aws网关-cli测试来测试我的API网关。通过脚本,我能够获得一个有效的证书,得到认证和正确的响应。我也尝试过邮递员与我的管理证书,它也工作。
在做了一些研究之后,我看到人们把这个问题提到CORS问题上。我已经检查了我的API网关设置,并确认我已经启用了CORS。同样的问题依然存在。
通过aws放大的调试功能,我能够在我的Chrome检查器中看到签名过程.使用一些accessKey和secretKey正确地执行了签名过程。我把那些钥匙从巡查员那里拉到我的邮递员里,并试图得到。
这些凭据无效,我收到以下错误消息:
{
"message": "The security token included in the request is invalid.",
"err:": "default"
}
更新:--我忘记将会话令牌复制到邮递员中。现在,通过我的应用程序生成的所有凭据,我可以在POSTMAN中从我的API中获得正确的结果。只是不在我的应用程序里。
在这一点上,对我来说这是一个很明显的问题。然而,我一直在使用aws放大的登录和获取过程。非常肯定的是,签名过程是通过在幕后放大完成的。
我在这个问题上花了3天时间,基本上什么都试过了.知道为什么不起作用了吗?
很多人认为在invoke 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
}
]
}
});
发布于 2018-09-18 13:08:59
刚刚解决了我的问题-我有授权设置的选项方法是AWS_IAM下的资源在API。但是,当我的浏览器发送请求时,它将首先向选项发送一个请求,以检查在此请求中没有凭据的某些标头。
因为我用IAM授权设置了选项,所以OPTIONS方法在没有凭据的情况下使用此请求对IAM进行检查。这就是我为什么收到“丢失身份验证令牌”的原因。
https://stackoverflow.com/questions/52371654
复制相似问题