keycloak~JWT各字(zi)段說明(ming)及(ji)擴展(zhan)字(zi)段的方法(fa)
jwt擴展字段介紹
為了(le)實(shi)現業(ye)務的定制化需(xu)求和(he)開(kai)發人員使用(yong)的便利(li),對kc的JWT進行(xing)了(le)擴展,這(zhe)個擴展字(zi)段在(zai)解析JWT之后都可以(yi)看到。
jwt的payload
{
"exp": 1675329802,
"iat": 1675329622,
"jti": "2a80e925-b9ce-464f-822d-5c801ff4e8a0",
"iss": "//xxx.xxx.com/auth/realms/xxx",
"aud": ["case", "realm-management", "account"],
"sub": "d21a5ec8-30c5-4db6-a26a-17ac4b3fcfd4",
"typ": "Bearer",
"azp": "democlient",
"session_state": "c6b5fdbc-38fd-45d7-bde1-de7cc18837d3",
"acr": "1",
"allowed-origins": ["*"],
"realm_access": {
"roles": ["manage-users", "query-realms", "query-clients", "query-users"]
},
"resource_access": {
"realm-management": {
"roles": ["view-realm", "manage-authorization", "manage-clients", "query-groups"]
},
"account": {
"roles": ["manage-account", "view-applications"]
}
},
"scope": "roles my-application-scope extension-roles email profile",
"phoneNumber": "13521972991",
"email_verified": true,
"loginType": "password",
"nickname": "張三",
"isGroupUser": 1,
"extension_roles": {
"weixin": ["product"]
},
"preferred_username": "test"
}
公用字段
- exp token過期時間戳
- iat token生成時間戳
- jti token的唯一身份標識
- iss token的發行機制,kc中的域,例如:
- 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字段
個性化字段
用戶(hu)屬性:是(shi)user_attribute表,在kc管理平臺中,可(ke)以通過用戶(hu)詳情-屬性[attributes]查看
- phoneNumber 用戶手機號
- email_verified 是否驗證了郵箱
- loginType 登錄方式【password,weixin,carsi,wechat-work】
- nickname 用戶昵稱【如果用戶屬性nickname時就用它;否則用戶名以wx或者phone開頭,并且用戶屬性手機號不為空,就用手機號;否則使用用戶名username】
- isGroupUser 是否為組管理員【1是、0否】
- extension_roles.weixin 擴展角色中的微信角色
- preferred_username kc中的用戶名username
為客戶端配置自定義屬性
-
通過客戶端模板,去添加一個模板,通過mappers將多個相關的屬性添加到這個模板里

-
選擇指定客戶端-》客戶端模板-》添加已有的模板


