keycloak~作為第三方登入的對接標準

张占岭發表於2024-05-20

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

四 認證流程

相關文章