【发布时间】:2019-09-09 05:06:45
【问题描述】:
我正在尝试使用 Cognito 用户池为 Lambda 代理集成资源授权 API Gateway 请求。
从客户端,所有请求都可以在没有授权者的情况下正常工作。当我添加授权者时,GET 请求在获得授权时工作,但 POST/PUT/DELETE 请求给我这个错误:
401 从源 [client] 访问 [Endpoint] 的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头
我已经为资源选择了'Enable CORS',但它仍然不起作用。
js 请求:
const jwt = this.$store.state.user
.getSignInUserSession()
.getIdToken()
.getJwtToken();
const config = {
headers: {
authorization: jwt,
},
id: generatedID,
name: 'generatedName',
};
axios.post(endpoint, config)
.then((val) => { this.info = val; })
.catch(err => console.log(err));
身份验证配置: authorizer config
如果我将请求类型从 POST 更改为 GET,它会起作用。如果我从 API Gateway 中删除授权者,它会起作用。对于 POST/PUT/etc,我缺少什么?
我想获得 200/201 响应并让请求通过 API 网关授权。
【问题讨论】:
-
对于 Lambda 代理集成,您需要在 Lambda 响应中手动添加 CORS 标头。请参考此documentation。
-
@lightyagami lambda 函数已经这样做了,但日志表明 lambda 函数甚至没有被命中。只有 API 显示了 cloudwatch 中的任何活动,并且它仅表明请求是“未经授权的”并停止在那里。
标签: amazon-web-services aws-lambda aws-api-gateway amazon-cognito