新網站對接到KC的部署 kc的環境 向kc申請自己的客戶端 kc的登錄介面 通過code換token介面 刷新token介面 kc的用戶信息介面 kc的jwt token說明 1. kc的環境 測試環境:https://test-kc.xxx.com 預發佈環境:https://pre-kc.xxx ...
新網站對接到KC的部署
- kc的環境
- 向kc申請自己的客戶端
- kc的登錄介面
- 通過code換token介面
- 刷新token介面
- kc的用戶信息介面
- kc的jwt token說明
1. kc的環境
測試環境:https://test-kc.xxx.com
預發佈環境:https://pre-kc.xxx.com
生產環境:https://kc.xxx.com
2. 向kc申請自己的客戶端
聯繫負責開發kc的同事,申請一個客戶端,需要提供以下信息:
client_id: 客戶端id
client_secret: 客戶端密碼
3. kc的登錄介面
-
/auth/realms/{realm}/protocol/openid-connect/auth?client_id=client_id&response_type=code&redirect_uri=redirect_uri
-
參數說明:
client_id: 客戶端id
response_type: code
redirect_uri: 登錄成功後的回調地址
4. 通過code換token介面
當你把第3步地址複製到瀏覽器後,會重寫向到登錄頁,輸入正確的用戶名和密碼後,提交後會重定向到來源頁,帶在地址上帶著code碼,這個code碼是用來換取token的。
- /auth/realms/{realm}/protocol/openid-connect/token
- 請求方式:POST
- 請求參數:
client_id: 客戶端id
client_secret: 客戶端密碼
grant_type: authorization_code
code: 通過登錄成功重寫向後地址上帶著的code
- 返回參數:
{
"access_token": "token",
"expires_in": 1800,
"refresh_expires_in": 1800,
"refresh_token": "refresh_token",
"token_type": "bearer"
}
5. 刷新token介面
通過第4步獲取到合法的token後,token的有效期是30分鐘,可以在kc上配置,如果過期了,需要通過刷新token介面獲取新的token
- /auth/realms/{realm}/protocol/openid-connect/token
- 請求方式:POST
- 請求參數:
client_id: 客戶端id
client_secret: 客戶端密碼
grant_type: refresh_token
refresh_token: 通過第4步獲取到的refresh_token
- 返回參數:
{
"access_token": "token",
"expires_in": 1800,
"refresh_expires_in": 1800,
"refresh_token": "refresh_token",
"token_type": "bearer"
}
6. kc的用戶信息介面
通過第4步獲取到的token,可以通過用戶信息介面獲取到用戶的信息
- /auth/realms/{realm}/protocol/openid-connect/userinfo
- 請求方式:GET
- 請求頭:
Authorization Bearer token
- 返回參數:
{
"sub": "1",
"email_verified": false,
"name": "admin",
"preferred_username": "admin",
"given_name": "admin",
"family_name": "admin",
"email": "
}
kc的jwt-token欄位說明
- exp token過期時間戳
- iat token生成時間戳
- jti token的唯一身份標識,對接token_id或者refresh_token_id,這兩個id在服務端會有存儲,與它頒發的
token里的jti相對應
- iss token的發行機制,kc中的域,例如:https://kc.xxx.com/auth/realms/
- aud 授權到的客戶端
- sub 當前用戶ID
- typ 認證方式
- azp 當前客戶端client_id
- session_state 當前會話id,瀏覽器中的AUTH_SESSION_ID和AUTH_SESSION_ID_LEGACY
- acr 如果clientSession通過cookie (SSO)進行身份驗證,則使用0,否則為1
- allowed-origins 允許哪種功能變數名稱使用我們的token
- realm_access 域的許可權
- resource_access 客戶端(資源)許可權,kc允許你為用戶依照客戶端去授權
- scope 客戶端模板,它將一類jwt中的屬性進行分類,通過這個scope模塊去渲染你的jwt欄位
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!