[英]How to allow API Gateway Proxy Integration with Cognito Authorizer for POST requests?
[英]How to pass API Gateway authorizer context to a HTTP integration
我已經為我的 AWS API 網關成功實施了一個 Lambda 授權方,但我想將一些自定義屬性從它傳遞到我的 Node.js 端點。
我的授權方的輸出遵循 AWS 指定的格式,如下所示。
{
"principalId": "yyyyyyyy",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow|Deny",
"Resource": "arn:aws:execute-api:<regionId>:<accountId>:<appId>/<stage>/<httpVerb>/[<resource>/<httpVerb>/[...]]"
}
]
},
"context": {
"company_id": "123",
...
}
}
在我的例子中, context
包含一些參數,比如company_id
,我想將它們傳遞到我的 Node 端點。
如果我要使用 Lambda 端點,我知道這是通過映射模板和類似這樣的東西完成的:
{
"company_id": "$context.authorizer.company_id"
}
但是,如果選擇 Lambda 作為集成類型,則人體映射模板僅在集成請求下可用。 如果選擇了 HTTP,則不會。
簡而言之,如何將company_id
從我的 Lambda 授權方傳遞到我的 Node API?
大部分功勞都歸功於@Michael-sqlbot 在對我的問題的評論中,但如果其他人發現了這個問題,我會在這里提供完整的答案。
授權方 Lambda
它必須以這種格式返回一個對象,其中上下文包含您要轉發到端點的參數,如問題中所指定。
{
"principalId": "yyyyyyyy",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [{
"Action": "execute-api:Invoke",
"Effect": "Allow|Deny",
"Resource": "arn:aws:execute-api:<regionId>:<accountId>:<appId>/<stage>/<httpVerb>/[<resource>/<httpVerb>/[...]]"
}]
},
"context": {
"company_id": "123", <-- The part you want to forward
...
}
}
方法請求
在 Method Request / HTTP Request Headers 下,添加要轉發的上下文屬性:
company_id
集成請求
在集成請求/HTTP 標頭下,添加:
company_id
context.authorizer.company_id
如果您使用lamda-proxy
,則可以從event.requestContext.authorizer.context
訪問上下文。
因此可以使用event.requestContext.authorizer.context.company_id
訪問您的company_id
。
這個方案奏效了嗎? 我遵循了確切的步驟,但“端點請求標頭”沒有我在授權方填充的上下文映射中所擁有的內容。
如果您使用的是lamda-proxy
(至少使用 Golang 后端),您可以訪問存儲在授權上下文中的值,而無需使用映射模板! 請記住重新啟動 API 並稍等片刻!
它對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.