我們正在使用 Cognito 用戶池和 SAML 聯合到我們公司的 IDP 來驗證我們系統中的用戶,使用 Flutter 前端。
我們已經設定了身份驗證代碼流程,可以成功獲取代碼并從 oauth2 端點使用此代碼獲取令牌。但是,我正在努力使用重繪 代碼獲取重繪 的令牌。
具體來說,我向 ../oauth2/token 端點發出請求,傳遞以下引數:
grant_type: refresh_token
client_id: {client id - same id used to request initial code and token set}
refresh_token: {refresh token obtained from above request}
這似乎遵循 AWS 檔案(我正在關注https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html)和其他問題的建議。但是,在撥打此電話時,我收到了 400 Bad Requesterror的invalid_grant. 這發生在 Flutter 代碼和 Postman 請求中。兩者都通過將上述內容包含在 x-www-form-urlencoded 正文中來發出請求。
AWS 應用程式客戶端未啟用密鑰,并且用戶池未設定為記住設備,因此我查看的其他問題似乎沒有涵蓋它(例如Cognito 用戶池:如何使用重繪 令牌重繪 訪問令牌)。應用程式客戶端還設定為啟用基于重繪 令牌的身份驗證。
查看 AWS 檔案,當重繪 令牌過期時會發生 invalid_grant。但是,該應用程式客戶端的重繪 令牌的到期時間設定為 30 天……并且在發出令牌后幾分鐘發出上述請求。
我知道有一個用于 Amplify 的 Flutter SDK,但我們大部分時間都在使用 API 呼叫和 WebViews。如果我能幫上忙,我寧愿不必說我們需要再次重建身份驗證流程。
有人會有什么想法嗎?
謝謝
uj5u.com熱心網友回復:
以下卷曲對我有用:
curl --location --request POST 'https://{{domain}}.auth.us-east-1.amazoncognito.com/oauth2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'scope={{custom_scope}}' \
--data-urlencode 'client_id={{client_id}}' \
--data-urlencode 'refresh_token={{refresh_token}}'
我相信范圍是沒有必要的。
我的建議是重新審視 SDK 的想法。如果訪問令牌已過期,SDK 會為您解決諸如自動創建訪問令牌之類的問題。如果你不使用它,你需要自己監控過期時間。這不僅僅是簡單的 API 呼叫問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/329551.html
