簡體   English   中英

嘗試使用 Cognito 向 Battle.net OIDC 進行身份驗證時出現錯誤的 id_token 頒發者

[英]Bad id_token issuer when trying to authenticate with Battle.net OIDC with Cognito

過去幾天我一直在嘗試設置 Cognito 以使用 Battle.net OIDC。 我相信我大部分時間都在那里。 我可以看到使用 cognito 托管的 UI,它可以正確驗證但隨后失敗,可能是試圖檢索令牌。

對 cognito 托管 UI 的第一個請求:

https://<removed>.auth.us-west-2.amazoncognito.com/oauth2/authorize?identity_provider=Blizzard&redirect_uri=https://<my-site-oauth-handler-removed>/oauth&response_type=CODE&client_id=<removed>&scope=openid

然后下一個請求是按預期向戰網 OIDC 發出的:

https://us.battle.net/oauth/authorize?client_id=<removed>&redirect_uri=https%3A%2F%2F<removed>.auth.us-west-2.amazoncognito.com%2Foauth2%2Fidpresponse&scope=openid&response_type=code&state=<removed>

然后將代碼傳遞到 cognito idpresponse:

https://<removed>.auth.us-west-2.amazoncognito.com/oauth2/idpresponse?code=<removed>&state=<removed>

此時,如果我的理解是正確的,cognito 應該嘗試點擊戰網/oath/token端點,然后將 id_token 和 access_token 返回到我的 redirect_url。 正是在這一點上,cognito 向我的 url 返回了一個錯誤:

https://<my-site-oauth-handler-removed>/oauth?error_description=Bad+id_token+issuer+oauth.battle.net&error=invalid_request

從缺乏戰網 OIDC 的文檔來看,我可能是少數嘗試將戰網 OIDC 與 Cognito 一起使用的人之一。 他們的實現很可能是一個錯誤,但我盡量不得出這個結論。

我現在最好的猜測是我沒有正確配置 Cognito 來發出令牌 POST 請求。 它需要使用帶有 clientid:password 的基本身份驗證,但我無法驗證它是否正確執行此操作,因為它已被抽象掉。

無論如何,當我通過我的應用程序(使用放大打開托管 UI)發出請求時,它確實返回但具有以下內容:

[ERROR] 51:05.25 OAuth - Error handling auth response. Error: Bad+id_token+issuer+oauth.battle.net
    at OAuth.<anonymous> (OAuth.js:202)
    at step (OAuth.js:52)
    at Object.next (OAuth.js:33)
    at OAuth.js:27
    at tryCallTwo (core.js:45)
    at doResolve (core.js:200)
    at new Promise (core.js:66)
    at __awaiter (OAuth.js:23)
    at OAuth.handleAuthResponse (OAuth.js:181)
    at AuthClass.<anonymous> (Auth.js:1632)

這是我所有相關的 Cognito 配置:

OIDC 提供商:

  • 提供者名稱:暴雪
  • 客戶 ID:[已刪除]
  • 客戶端密碼:[已刪除]
  • 屬性請求方式:POST
  • 授權 scope:openid
  • 發行人: https://us.battle.net/oauth

應用客戶端:

  • 名稱:[已刪除]
  • 應用程序客戶端 ID:[已刪除]
  • 應用客戶端密鑰:(無密鑰)

應用客戶端設置:

  • 啟用身份提供者:暴雪
  • 回調 URL: https://[removed]/oauth
  • 注銷 URL: https://[已刪除]/oauth

  • 允許的 OAuth 流:

    • 授權碼授予
    • 隱式授權
  • 允許的 OAuth 范圍
    • email
    • 打開ID
    • aws.cognito.signin.user.admin
    • 輪廓
  • (我已經嘗試了這些的每一種變化,它似乎並沒有改變結果)

聯合身份:

  • 身份驗證提供程序
    • 開放ID
      • us.battle.net/oauth

IAM 身份提供商:

  • 提供者名稱:us.battle.net/oauth
  • 提供者類型:OIDC
  • 提供者 URL:us.battle.net/oauth
  • CA 指紋:[已刪除]
  • 觀眾:[我的戰網客戶端ID]

我已經用盡了自己的資源,並要求對此提供任何指導。

謝謝!

這是由於暴雪從其眾所周知的端點發布其令牌但將iss字段設置為oauth.battle.net導致 Cognito(或任何其他令牌驗證)失敗,因此出現錯誤消息

Bad+id_token+issuer+oauth.battle.net

我在 Discord 中向他們的 API 團隊提出了這個問題,根據 email 發送給開發人員的消息,他們將於 11 月 25 日發布修復程序。

尊敬的社區開發者,

今年早些時候,我們推出了一個新的 OAuth 發現端點,它實現了 OpenID Connect 發現規范。 我們希望在從 oauth.battle.net 到由眾所周知的配置端點 JSON 響應返回的頒發者的 OpenID 授權流程期間部署對 id_token 的頒發者字段 iss 的更改。 這將是對某些 OAuth OIDC 客戶端的潛在重大更改,但它符合 OpenID 連接規范: https://openid.net/specs/openid-connect-core-1_0.html#IssuerIdentifier

您的 OAuth 客戶端應用程序被確定為可能受此更改影響的應用程序。

我們計划在 2019 年 11 月 25 日發布此更改。

以下是您可以采取的步驟,以確保您的 OpenID Connect 客戶端在更改后繼續工作:

導航到下面與您的客戶端應用程序運行的區域相對應的眾所周知的配置端點之一,並檢查“頒發者”字段。

如果 issuer 字段與為您的 OAuth OIDC 客戶端配置的 issuer 匹配,則您的客戶端是兼容的並且您已經合規並且不需要進行任何更改。

如果來自知名配置端點的頒發者字段與您的客戶端配置中設置的頒發者不同,請更改頒發者以匹配知名配置端點。

如果您的客戶端支持 OpenID 發現端點標准,您可以將其配置為從眾所周知的配置端點讀取所有必要的設置。 您的 OAuth 客戶端應自行配置。

暫無
暫無

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

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