簡體   English   中英

Spring 授權服務器:向 Introspect 端點發送不透明令牌返回“invalid_request”

[英]Spring Authorization Server: Sending Opaque Token to Introspect endpoint returns "invalid_request"

我正在將項目遷移到 Spring 授權服務器 (1.0.0),但遇到了問題。

盡管缺少很多示例或文檔,但我一直在努力嘗試將其設置為使用授權代碼流(使用 PKCE)返回不透明令牌。

我已經設法部署了 Scheme 並連接了所有服務,並且已經到了我的 SPA 可以發送用戶登錄授權服務器並使用返回的代碼從服務器獲取令牌的地步。

嘗試將該訪問令牌發送到內省端點時出現問題(我沒有對此進行任何配置,它已保留為默認值)。

無論我使用什么工具(Spring Oauth2 資源服務器或 Postman),當我傳入訪問令牌時,我都會收到以下響應。

{
    "error": "invalid_request"
}

我已確認訪問令牌存在於 oauth2_authorization 表中,並且正在使用正確的客戶端 ID 和密碼(內省請求中不正確的客戶端 ID 或密碼會返回不同的錯誤)。

控制台中沒有顯示任何錯誤(無論日志級別如何)所以我真的有點迷路了。

這個項目的文檔似乎真的很有限,所以想接觸社區,看看是否有人有任何關於如何設置不透明令牌的例子,或者我可能會出錯的任何想法。

聽起來我們需要文檔中的官方示例或指南來演示此設置。

碰巧的是,我們將在幾天后(2023 年 1 月 26 日)在SpringOne Essentials上的“配置和擴展 Spring 授權服務器”演講中介紹這一點。 我將在即將到來的演講中介紹不透明令牌和令牌內省。

我配置入門示例的一般方法如下:

  • 將示例RegisteredClient拆分為兩個客戶端,分別稱為oidc-clientmessaging-client
  • 保留為 OIDC 配置的oidc-client ,這意味着它將保持配置以使用 JWT
  • messaging-client更改為使用不透明令牌與.tokenSettings(TokenSettings.builder().accessTokenFormat(OAuth2TokenFormat.REFERENCE).build())

然后oidc-client將僅用於在客戶端登錄,因此它只需要像openidprofile這樣的范圍。 messaging-client將被客戶端用來獲取訪問令牌以訪問資源服務器上的受保護資源,因此在此示例中它需要范圍message.readmessage.write

RegisteredClient拆分為兩個單獨的客戶端是必要的,以便 JWT 可以繼續用於 UserInfo 端點 [1]。

有關示例,請參見以下提交:

[1]注意:將 Spring 授權服務器配置為對 UserInfo 端點使用不透明令牌實際上有點困難(盡管很有可能)。 它涉及從 Spring Security 配置一個OpaqueTokenIntrospector以在內部檢查令牌。 這將是一個相當高級的設置,可能會有些混亂,因此我們選擇不嘗試在演講中介紹它。

暫無
暫無

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

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