當某些合作商希望把你的keycloak作為他們的一種第三方登錄方式時,就像微信,google,github,使用你的keycloak上的賬戶資源時,你就需要考慮如何做一個開放的,標準的文檔了。 一 基本角色 認證提供者:keycloak服務,https://kc.xxx.com 第三方應用:先到ke ...
當某些合作商希望把你的keycloak作為他們的一種第三方登錄方式時,就像微信,google,github,使用你的keycloak上的賬戶資源時,你就需要考慮如何做一個開放的,標準的文檔了。
一 基本角色
- 認證提供者:keycloak服務,https://kc.xxx.com
- 第三方應用:先到keycloak上註冊,由keycloak頒發client_id和client_secret,並與第三方應用確定好callback回調地址。
- 用戶:使用keycloak服務完成登錄,然後去訪問第三方應用,當然也可以訪問對接到keycloak上的所有服務資源。
二 接入流程
1 向keycloak管理員提供第三方應用基本信息,應用名稱,回調地址,管理員添加好之後,連同client_id和client_secret告訴第三方應用。
2 在第三方應用中,添加法寶登錄鏈接,例如:
<a href="https://kc.xxx.com/auth/realms/fabao/protocol/openid-connect/auth?client_id=aaa&redirect_uri=http://localhost:8080/callback%3Fredirect_uri%3Dhttp%3A%2F%2Flocalhost%3A8080%2Fhello&response_type=code&scope=openid">kc登錄</a>
- 客戶端ID client_id=aaa
- 授權類型 response_type=code
- scope類型 scope=openid
- 三方應用的回調地址 redirect_uri
註意:您在對接時,需要對redirect_uri參數進行urlencode編碼。
3 登錄成功後,keycloak會根據你的回調地址,重定向到你的系統中,並帶著code和redirect_uri及session等信息。
http://localhost:8080/callback?redirect_uri=http://localhost:8080/hello&session_state=45691669-f290-4991-8f43-d6c411a91b7c&code=b3921500-f6a6-494d-ad23-41b75c436fe7.45691669-f290-4991-8f43-d6c411a91b7c.02bb9b29-2c53-45c7-b009-43e3c78c6aff
- 三方應用系統的回調地址:redirect_uri
- 授權碼:code
- 會話標識:session_state
三 獲取用戶信息
在三方應用自己的callback介面里,可以進行用戶的映射與持久化,你可以通過傳過來的code來獲取當前用戶在keycloak平臺的access_token,然後你再根據access_token獲取用戶基本的開放的信息,你可以將這個用戶信息保存到應用的本地資料庫,當然也可以與你現有用戶進行綁定。
1 通過code來獲取access_token:/auth/realms/xxx/protocol/openid-connect/token
響應內容為access_token和refresh_token
2 通過access_token來獲取用戶信息,正常返回200,如果是返回401,你需要從新獲取
獲取用戶信息:/auth/realms/xxx/open/userinfo
{
"nickname": "張三",
"userId": "347c9e9e-076c-45e3-be74-c482fffcc6e5",
"username": "test"
}
3 當三方應用通過keycloak的介面獲取到了用戶信息之後,您就可以與本地賬號進行映射了,一般的做法是這樣的,如圖:
四 認證流程
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!