2017-09-21 73 views
5

我正在嘗試使用帶有cognito用戶池的aws api gateway authorizer。當我使用aws api網關控制檯進行測試時,它工作正常。AWS Api Gateway Authorizer + Cognito用戶池無法正常工作{「message」:「Unauthorized」}

但是當我試圖使授權的API,它說"message": "Unauthorized".請檢查下面的截圖

API網關控制檯屏幕截圖 - 這工作得很好 enter image description here

郵差屏幕截圖 - 不工作 enter image description here

有人可以幫忙嗎。

僅供參考我按照這裏提到http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

+0

它只是'username'而不是'cognito:username'?我沒有使用確切的方法,但我不確定那部分是正確的。 –

+1

cognito:用戶名是我獲得成功授權的回覆。即使我也爲自定義授權獲得相同類型的問題。我確實在做一些愚蠢的事情,但無法弄清楚。如果有人能幫到那將會很棒.. –

+0

對不起,我誤以爲是你的代碼。郵差說在響應中有12個標題。你可以發佈這些嗎? –

回答

1

我有同樣的問題和你一樣意識到,我輸入了錯誤的令牌來源的說明。

<your API> -> Authorizers -> Token Source中輸入HTTP標頭的名稱,其中API網關必須查找標記。 (在你的情況下,Authorization

保存它,並且在測試之前不要忘記部署。

enter image description here

+0

FYI我已授予作爲令牌源並且還部署了API,但仍面臨同樣的問題。 –

2

我試圖馬蒂亞斯的解決方案出來,並沒有在第一次工作。奇怪的是,我可以在幾個小時之後回到它並再次嘗試,並且這次在部署API之前對我的API網關進行了一些其他更改。這一次它的工作,即使我做的其他變化是膚淺的。

此外,正如情況經常如此,AWS文檔是錯誤的,指出您應該使用method.response.header.Authorization。這實際上只對使用自定義身份驗證的Lambdas有效。當您使用新的Cognito用戶池授權者時,您應該在此僅使用Authorization

  1. 使用Authorizationmethod.response.header.Authorization
  2. 做一個粗淺的改變你的資源在API網關
  3. 部署自己的API,並等待第二

- 編輯 -

我只需將我的堆棧轉換爲Cloudformation,並發現如果您使用Cloudformation部署授權者,則實際上需要指定完整的method.response.header.Authorization用於令牌源。事實上,如果你不使用這種格式,堆棧部署將會失敗。但是,一旦部署完畢,如果您查看控制檯中的授權者,它將丟棄method.response.header部分。