簡體   English   中英

API 網關 Cognito 用戶池授權方 - 401 未經授權

[英]API gateway Cognito user pool authorizer - 401 unauthorized

我試圖讓我的 API 網關與 Cognito 用戶池授權方一起工作,但我似乎無法讓它工作。 到目前為止,我沒有使用任何 SDK。 一些細節——對於 Cognito 池,我將 ID 提供者設置為 Cognito 用戶池,將 Oauth 流“隱式授權”和范圍設置為“openid”。 創建了一個還生成了客戶端密碼的應用程序(和域)。 電子郵件是唯一的字段。 - 在 API 網關上,我為認知身份驗證和標頭添加了與“授權”相同的用戶池。 沒有添加范圍,也沒有令牌驗證。

我使用 Cognito 的默認登錄頁面登錄並檢索“id_token”(登錄后出現在 URL 中)並在郵遞員中使用它來將我的 API 觸發為“401 未授權”。 我在 API 網關授權測試工具中使用了相同的令牌,但我仍然未獲得授權。 很明顯我的令牌是問題所在。

我已經嘗試了 oauth 流程和范圍以及 api 網關與 lambda 集成的各種組合,以創建另一個具有模擬集成的組合。 還創建了不同的用戶池和應用程序,有和沒有客戶端密碼,同樣的錯誤。

如果上面沒有工作我會很好(相信我的錯誤)但同樣的事情適用於嘗試過的同事。 唯一不同的是,在登錄后,他定向到一個本地主機頁面,在那里他捕獲了相同的“id_token”並使用該令牌成功訪問了 API 網關。

所以我不知道有什么區別? 它不應該像我嘗試的那樣工作嗎?

當我從郵遞員那里點擊 API 時,一些 cloudwatch 訪問日志。 (也試過卷曲)

{ "requestId": "bb9ba6a2-6c25-11e8-b024-530b33bce48d", "ip": "xxxx", "caller": "-", "user": "-", "requestTime": "09/Jun/ 2018:20:43:15 +0000", "httpMethod": "GET", "resourcePath": "/test", "status": "401", "protocol": "HTTP/1.1", "responseLength": "26", "authProvider": "-", "authType": "-", "claimProperty": "-", "property": "-", "principalId": "-" }

謝謝。 任何幫助表示贊賞。

結果證明復制access_token也是一個非常愚蠢的錯誤。 使用正確的id_token就可以了。 花了我2天才弄明白!!!

我想提交另一個非常愚蠢的原因,為什么這不起作用 - 除了接受的答案提到的所有內容之外,絕對要做所有事情:

我正在 Postman 上進行測試和驗證。 我添加了Authorization標頭並傳入了我的id_token 但是,我從未勾選復選框以在我的實際請求中實際包含標題: 在此處輸入圖片說明 希望這可以避免有人在 API Gateway 和 Cognito 上花費數小時調試所有可能的配置,卻發現我從來沒有首先發送標頭!

盡管我的id_token有效並通過標頭authorization正確傳遞給 API 網關,但我還是出現了這種症狀

在您的 API 網關資源方法執行設置API:YourAPI > Resources > GET > Method Request > Settings確保OAuth Scopes設置為product-api/read_product

我希望我生命中的 18 個小時也能為您節省一點。

暫無
暫無

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

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