當某些合作商希望把你的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的介面獲取到了使用者資訊之後,您就可以與本地賬號進行對映了,一般的做法是這樣的,如圖: