簡體   English   中英

AWS Api Gateway 模擬集成響應標頭映射,如何?

[英]AWS Api Gateway mock integration response header mapping, how?

我正在挖掘網絡並一直試圖找到在以下情況下我缺少的東西:我試圖解決的基本問題是:當http://example.com/login?target=http://google.com被調用時,用戶被重定向到 OAuth 登錄頁面,其狀態指的是目標查詢參數中的 url。

所以: http://example.com/login?target=http://google.com將被重定向到http://authenticator.com/login?type=...&redirect_uri=...&client_id=...&state=http://google.com

我可以用 Lambda 做到這一點,但我覺得沒有必要,可以單獨使用 API Gateway。

首先,我創建了/login資源和一個GET方法,並向其中添加了一個模擬集成。

集成請求

我在方法響應中設置了 302:

方法響應

最后我添加了集成響應:

整合響應

但是,當我測試該方法時,缺少 Location 標頭。 如果我在集成響應中的位置標頭中放置一個靜態字符串,它會起作用,但是無論我在標頭映射中嘗試什么,它都不起作用。

我在集成請求映射中嘗試過的事情:

{
  "statusCode": 200,
  "headers": {"target": "https://google.com"}
}
{
  "statusCode": 200,
  "target": "https://google.com"
}

我似乎integration.response.body.targetintegration.response.header.target總是空的。 根據文檔, headers屬性可以是集成響應的一部分,但我無法從我在集成請求中設置的映射模板中獲得任何值。

知道我做錯了什么嗎?

您可以進行響應覆蓋,例如:在您的集成請求中

#set($urlProxy = $method.request.path.proxy)
{
    "statusCode": 301,
}
#set($context.responseOverride.header.location = "https://www.foo.bar.com/$urlProxy")

這將覆蓋您的響應標頭位置

看起來您正在嘗試從標頭值進行映射,但從未設置標頭值,而是在正文中設置了一個名為“標頭”的屬性。 為了映射來自integration.response.header.target的值,您需要在集成請求的 HTTP 標頭部分的模擬中設置該值。

但是,您可能會發現將模擬的請求映射模板設置為更簡單

{ "statusCode": 200, "target": "https://google.com" }

然后您可以使用響應映射將您的Location標頭設置為integration.response.body.target

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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