[英]Simplest way to get current user logged in Keycloak
我已經在我的 maven java web 應用程序上實現了一個非常簡單的 keycloak 集成。 假設我直接為 keycloak 登錄頁面調用 url。
http://localhost:8180/auth/realms/myrealm/protocol/openid-connect/auth?client_id=myclientid&response_type=code&scope=openid&redirect_uri=http//localhost:8080/mypage.html
成功輸入我的用戶名和密碼后,我被重定向到 mypage.html,url 是這樣的
http://localhost:8080/mypage.html?session_state=c9482da3-50ff-4176-bf3c-54227271c661&code=5d4aebda-54d8-41ad-8205-c4d7e021770f.c9482da3-50ff-4176-bf3c-54227271c661.d5c1b6ac-c427-46da-8509-f2689849103b
如果我把它分解
http://localhost:8080/mypage.html?
session_state=c9482da3-50ff-4176-bf3c-54227271c661&
code=5d4aebda-54d8-41ad-8205-c4d7e021770f.c9482da3-50ff-4176-bf3c-54227271c661.d5c1b6ac-c427-46da-8509-f2689849103b
讓用戶當前登錄以便我可以顯示它的名稱的最簡單 - 最簡單的方法是什么?
查看您提出的請求,您還沒有完成 OIDC 代碼流。
我假設您的 java 應用程序充當 OIDC 客戶端,在這種情況下,它需要通過調用 realm 的令牌端點來交換訪問、id 和刷新令牌的授權代碼。
例如
POST /auth/realms/mmyrealm/protocol/openid-connect/token HTTP/1.1 主機:server.example.com 內容類型:application/x-www-form-urlencoded 授權:基本 czZCaGRSa3F0MzpnWDFmQmF0M2JW
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
最簡單的方法是使用 Java OIDC 客戶端或 OAuth2 客戶端為您進行授權和代碼交換,並提供 OAuth2/OIDC 令牌原語供您進行編碼。
看看: Scribe Java OAuth2 客戶端Nimbus OIDC SDK
如果您在令牌中包含用戶聲明,則用戶的詳細信息將在令牌端點返回的令牌中的聲明中。
編輯:OIDC 授權代碼流是 OIDC 授權流之一。 它提供了不向用戶代理公開任何實際令牌的好處 - 例如 web 瀏覽器 - 並允許 oidc 客戶端在交換 OIDC 令牌的代碼之前向令牌服務器進行身份驗證
在高層次上會發生以下情況:
OIDC 客戶端發出身份驗證請求
客戶端進行身份驗證 - 這可能是最終用戶
授權服務器在重定向時向客戶端返回授權代碼
OIDC 客戶端從授權服務器的令牌端點檢索訪問、ID 和刷新令牌
如果需要,從 UserInfo 端點檢索用戶信息或使用 introspect 端點檢查訪問令牌
實際用戶的詳細信息將在 ID 令牌中的聲明中,這是一個普通的 JWT。 Keycloak 也允許您將聲明嵌入到訪問令牌中。
使用 Keycloak 進行身份驗證后,您將被重定向回 web 應用程序重定向 URI。
根據你的細分
http://localhost:8080/mypage.html?
session_state=c9482da3-50ff-4176-bf3c-54227271c661&
code=5d4aebda-54d8-41ad-8205-c4d7e021770f.c9482da3-50ff-4176-bf3c-54227271c661.d5c1b6ac-c427-46da-8509-f2689849103b
您的請求處理程序需要從該請求中提取代碼,然后再次調用 keycloak 以交換訪問、ID 和刷新令牌的授權代碼
例如
POST /auth/realms/myrealm/protocol/openid-connect/token HTTP/1.1
Host: localhost:8180
ContentType: application/x-www-form-urlencoded
Authorization: <whatever method your oidc client is usingL
grant_type=authorization_code&
code=5d4aebda-54d8-41ad-8205-c4d7e021770f.c9482da3-50ff-4176-bf3c-54227271c661.d5c1b6ac-c427-46da-8509-f2689849103b&
client_id=myclientid&
redirect_uri=....
理想情況下,您有一個用於接受令牌的路由處理程序 - 可能是一個令牌端點,它也接受指示請求的原始 uri 的查詢參數,以便如果這是面向 web 應用程序的用戶,您可以重定向回該參數。 如果它是完全編程的,那么您可以使用 nimbus sdk 實現所有這些。
對授權碼流程https://rograce.github.io/openid-connect-documentation/explore_auth_code_flow的各個部分有很好的總結
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.