0

每当我开始在我的函数上使用 AWS_IAM 授权方时,我的 API GET 请求(由 Web 客户端发出)都会收到 aNo 'Access-Control-Allow-Origin' header is present on the requested resource.并且我得到 403 状态代码。当我删除 aws_iam 授权方时,API 请求(通过同一个 Web 客户端发出)成功。所以我很确定这实际上不是 CORS 错误,因为我已经仔细检查了我的 API 是否启用了 cors。我不确定我是否错误地使用了 AWS Javascript SDK,或者我是否没有在我的 serverless.yml 配置中为 AWS_IAM 生成正确的角色。

当我使用来自 AWS 的个人访问密钥运行来自邮递员的请求时,请求成功。当我控制台记录来自 AWS.config.credentials 的密钥并在邮递员中使用这些密钥时,请求会收到无效令牌错误消息。也许我没有为我的联合身份池生成正确的角色?

我在前端使用 aws4 来签署请求,并使用 axios 来发出请求。

有任何想法吗?

4

1 回答 1

1

Axios 将发出飞行前请求。它是一种OPTIONS类型,在发出请求之前需要 200 响应GET。它还需要返回 CORS 标头:

Access-Control-Allow-Origin: *

Postman 不会自动进行相同的调用,但您可以使用它来测试该请求。确保您的 API 接受OPTIONS该路由的请求方法,并且它返回带有 CORS 标头的空 200 响应,我认为您会很高兴。

AFAIK,OPTIONS请求不需要经过身份验证。只要给绿灯。可能是您的客户端调用此端点作为正在验证的 OPTIONS 请求,增加了第二层混淆,或者如果 AWS 正在使用一个类型标头,您可能需要添加一个Access-Control-Allow-Headers以允许类型标头。Authorisation

如果不进行调试,很难提供更多信息,但我会从一个OPTIONS请求开始。

于 2018-10-03T14:58:43.217 回答