amazon-web-services - 如何允许 API Gateway 代理与 Cognito Authorizer 集成以进行 POST 请求?
问题描述
我正在尝试使用 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));
授权配置: 授权配置
如果我将请求类型从 更改POST
为GET
,它可以工作。如果我从 API Gateway 中删除授权者,它会起作用。我对 POST/PUT/etc 缺少什么?
我想获得 200/201 响应并请求通过 API 网关授权。
解决方案
如果我将请求类型从 POST 更改为 GET,它可以工作。
这可能是因为当您这样做时,它会变成一个“简单请求”,并且它不会执行飞行前 OPTIONS 请求,在您的情况下由于授权方而失败。
如果我从 API Gateway 中删除授权者,它会起作用。我对 POST/PUT/etc 缺少什么?
OPTIONS 请求无法通过 Authorizer 控件,如果您删除 Authorizer 它可以工作。
您的问题的完整解决方案可以在这里找到
Vue & Axios + AWS API Gateway & Lambda - CORS + POST 不工作
总结。如果你有一个
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 请求将到达您想要的目的地。
推荐阅读
- javascript - 从 Firestore 中的嵌套 DocumentReference 项中获取字段
- excel - 我在嵌套的 If 函数上不断收到“参数过多”错误
- swiftui - SwiftUI 符合 Hashable
- c - 如何在 C 中保留输入字符的大小写?
- string - 如何使用盒子
作为带有 &str 键的哈希图的查找键? - android - 尝试在重新创建 RecyclerView 时设置它的滚动状态,但 Kotlin 说我不能,因为 setter 是公共的......?
- julia - 如何在 Julia 中保留向量的值
- python - 为什么列表上的 os.path.join() 和列表上的 os.path.sep.join() 在功能上不相同?
- swift - 根据温度关闭/打开恒温器。以及是否下雨
- c# - 按位将 long 解压缩为两个数字