keycloak~作為第(di)三方登錄的(de)對接標(biao)準
當某些合作商(shang)希望把(ba)你(ni)的(de)(de)keycloak作為他們的(de)(de)一(yi)種第三方(fang)登錄方(fang)式(shi)時,就(jiu)(jiu)像微信(xin),google,github,使用你(ni)的(de)(de)keycloak上的(de)(de)賬戶資源時,你(ni)就(jiu)(jiu)需要考慮(lv)如何做一(yi)個開(kai)放的(de)(de),標(biao)準的(de)(de)文檔了。
一 基本角色
- 認證提供者:keycloak服務,
- 第三方應用:先到keycloak上注冊,由keycloak頒發client_id和client_secret,并與第三方應用確定好callback回調地址。
- 用戶:使用keycloak服務完成登錄,然后去訪問第三方應用,當然也可以訪問對接到keycloak上的所有服務資源。
二 接入流程
1 向(xiang)keycloak管理(li)員提供(gong)第(di)三方(fang)應用(yong)基本信(xin)息,應用(yong)名(ming)稱,回(hui)調地址,管理(li)員添加好之后(hou),連同client_id和client_secret告(gao)訴(su)第(di)三方(fang)應用(yong)。


2 在第三方應用(yong)中,添加(jia)法寶登錄鏈接(jie),例如:
<a href="//kc.xxx.com/auth/realms/fabao/protocol/openid-connect/auth?client_id=aaa&redirect_uri=//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
注意:您在對接時(shi),需要對redirect_uri參數進行urlencode編碼。
3 登錄成功后,keycloak會根據你的回調地址,重定向到你的系統中,并帶著code和redirect_uri及session等信息。
- 三方應用系統的回調地址:redirect_uri
- 授權碼:code
- 會話標識:session_state
三 獲取用戶信息
在三方應用自己的callback接口里,可以進行用戶的映射與持久化,你可以通過傳過來的code來獲取當前用戶在keycloak平臺的access_token,然后你再根據access_token獲取用戶基本的開放的信息,你可以將這個用戶信息保存到應用的本地數據庫,當然也可以與你現有用戶進行綁定。
1 通過code來(lai)獲取access_token:/auth/realms/xxx/protocol/openid-connect/token

響應內(nei)容為access_token和(he)refresh_token

2 通過access_token來獲取用戶信息,正常返回200,如果是返回401,你需要從新獲取
獲取(qu)用戶(hu)信息:/auth/realms/xxx/open/userinfo
{
"nickname": "張三",
"userId": "347c9e9e-076c-45e3-be74-c482fffcc6e5",
"username": "test"
}
3 當三(san)方應(ying)用通過keycloak的(de)(de)接(jie)口獲取(qu)到了用戶信息之后,您(nin)就可以與(yu)本地(di)賬號進行映射了,一般的(de)(de)做法是這樣的(de)(de),如(ru)圖:

四 認證流程
