簡體   English   中英

讓當前用戶登錄 Keycloak 的最簡單方法

[英]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 令牌的代碼之前向令牌服務器進行身份驗證

在高層次上會發生以下情況:

  1. OIDC 客戶端發出身份驗證請求

  2. 客戶端進行身份驗證 - 這可能是最終用戶

  3. 授權服務器在重定向時向客戶端返回授權代碼

  4. OIDC 客戶端從授權服務器的令牌端點檢索訪問、ID 和刷新令牌

  5. 如果需要,從 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.

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