簡體   English   中英

如何將 API 網關授權方上下文傳遞給 HTTP 集成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM