keycloak~作爲第三方登錄的對接標準

當某些合作商希望把你的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的接口獲取到了用戶信息之後,您就可以與本地賬號進行映射了,一般的做法是這樣的,如圖:

四 認證流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章