我正在尝试使用Cognito用户池授权对Lambda代理集成资源的API网关请求。
在没有授权者的情况下,来自客户端的所有请求都可以正常工作。当我添加一个Authorizer时,GET请求在获得授权时可以工作,但是POST / PUT / DELETE请求给我这个错误:
401 从起始点[客户端]到[端点]的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网关中删除了授权者,它将起作用。 POST / PUT / etc我缺少什么?
我想获得200/201响应并请求通过API网关授权。
答案 0 :(得分:0)
可以按照本文档中的说明向API网关添加预检“选项”来解决此问题。
添加预检条目后,api网关应类似于屏幕截图。
答案 1 :(得分:0)
如果我将请求类型从 POST 更改为 GET,它会起作用。
那可能是因为当您这样做时,它会变成一个“简单的请求”,并且它不会执行因授权方而在您的情况下失败的飞行前 OPTIONS 请求。
<块引用>如果我从 API Gateway 中删除 Authorizer,它就可以工作。我在 POST/PUT/etc 中缺少什么?
OPTIONS 请求无法通过 Authorizer 控件,如果您删除 Authorizer 它起作用。
可以在此处找到问题的完整解决方案
Vue & Axios + AWS API Gateway & Lambda - CORS + POST not working
总结。如果你有
route verb Authentication integration
/private POST/GET yes lambda-private
然后你需要创建一个额外的
route verb Authentication integration
/private POST/GET yes lambda-private
/private OPTIONS no lambda-CORS-response
因此,您的飞行前请求将得到很好的响应,并且 POST/GET 请求将到达您想要的目的地。