我正在開發一個將來可能支持社交登錄的應用程式(除了我們自己的 keycloak 用戶名/電子郵件注冊)。
我正在嘗試確定使用 keycloak ID 令牌中的“sub”宣告作為我們內部 mongo db 中用戶的主鍵(“_id”欄位)是否安全。理想情況下,我希望使用令牌中的 id,因為在某些情況下,它可以讓我無需在我們的 api 中進行額外的用戶查找。
我看到 Microsoft azure 檔案顯示他們的身份驗證令牌同時具有“sub”和“oid”,其中“oid”建議用于內部用戶查找,因為它是全域唯一的。請參閱本節。
此 ID 在應用程式中唯一標識用戶 - 登錄同一用戶的兩個不同應用程式將在 oid 宣告中收到相同的值。Microsoft Graph 將回傳此 ID 作為給定用戶帳戶的 id 屬性。
那么 keycloak 中是否有等效的“oid”宣告,我是否需要添加自定義宣告以實作等效宣告,或者我是否可以只使用“sub”宣告?
uj5u.com熱心網友回復:
查看JSON Web Token (JWT)檔案,即在“sub”(主題)宣告部分:
4.1.2. “子”(Subject)宣告
“sub”(主題)宣告標識了作為 JWT 主題的主體。(...)。主題值必須在發行者的背景關系中限定為本地唯一或全域唯一。此宣告的處理通常是特定于應用程式的。(...)。使用此宣告是可選的。
僅從我對本文的解釋來看,不能保證sub給定用戶的宣告在不同的應用程式(即客戶端)中是相同的。此外,該宣告是可選的。
因此,要準確回答您的問題,我們需要查看OpenID connect的背景關系:
OpenID Connect 對 OAuth 2.0 進行的主要擴展以使最終用戶能夠被驗證是 ID 令牌資料結構。
子: 必填。主題識別符號。最終用戶的發行者內的本地唯一且從未重新分配的識別符號,旨在由客戶端使用(...)。
ID Token好的,從這個文本和你必須將范圍傳遞給請求的事實openid,你可以確定sub宣告將在ID Token.
關于是否sub對所有客戶端都相同的問題,這也是同一檔案中“主題識別符號型別”部分下的地址:
主題識別符號型別
主題識別符號是最終用戶在發行者中的本地唯一且從不重新分配的識別符號,旨在由客戶端使用。
本規范定義了兩種主題識別符號型別:
public - 這為所有 Clients 提供相同的子(主題)值。如果提供者在其發現檔案中沒有 subject_types_supported 元素,則這是默認設定。
成對- 這為每個客戶端提供不同的子值,以免客戶端在未經許可的情況下關聯最終用戶的活動。
OpenID 提供者的發現檔案應該在 subject_types_supported 元素中列出其支持的主題識別符號型別。如果陣列中列出了多個型別,客戶端可以選擇在注冊期間使用 subject_type 引數提供其首選識別符號型別。
從現在開始,keycloak 支持主題識別符號型別public和pairwise主題識別符號型別。如果未明確指定,public則默認使用該選項。
所以得出結論:
還是我可以只使用“子”宣告代替?
是的,只要您考慮到正在使用的主題識別符號型別。
uj5u.com熱心網友回復:
主題值必須在發行者的背景關系中限定為本地唯一或全域唯一。
所以“sub”(主題)Claim和“iss”(Issuer)Claim的組合總是全域唯一的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/491114.html
