-
UaaTokenService裏面詳細記錄了clientdetails 和 users + userinfo是怎麼映射到token中去的
userinfo表結構的info結構參見UserInfo類,roles和user_attributes;看UserInfoRowMapper; -
從UaaUserRowMapper中,可以看到,user的authorities的來源;groups + 當前zone給用戶配置的默認的group(uaa.yml中的oauth.user.authorities字段的配置的值)
2.access token上scope字段的來源
從UaaAuthorizationRequestManager中可以看出,如果是client_dcredentials的話,{
user的scope這個說法,就是user的authority,注意不是user表的authorities字段存儲的值,而是group模塊存儲的權限 + zone default groups的並集;users表的authorities的值貌似沒啥用?
token的scope字段是client的scope和user的scope的交集;
client scope的取值邏輯爲
當爲client_credentials類型時,client scope來源爲client的authorities字段;如果是其他類型的話,client scope的來源爲爲client表中scope字段的值;
如果用戶輸入了scopes,則client的scopes值爲用戶輸入的scopes值剔除不在client scope來源中的scope,;如果用戶沒有傳遞scopes,
當爲client_credentials類型時,client scope的值爲client的authorities字段的值;如果是其他類型的話,token的scope的值爲client表中scope字段的值;
user scope的取值邏輯爲
當爲client_credentials類型時,此時沒有用戶參與,也就沒有user scope;如果是其他類型的,user scope 爲group模塊存儲的權限 + zone default groups的並集;
取交集client scope和user scope的交集;
}
-
grant_type:用戶傳輸的
-
如果是一個user token的話,會有這四個值,client token 則沒有{
user_id=users#id,
user_name=users#username,
email=users@email
origin=user 的origin,user的zone_id,僅僅針對user token
} -
{
- exp:當前時間+有效期,有效期在client的access_token_validity,如果client上沒有配置,則取zone的config字段上配置,如果zone上也沒有配置,則使用global token validity seconds這個全局配置;
- jti=uuid請求時生成,無需參數
- iat=now,timeService.getCurrentTimeMillis();
- sub= Subject Claim,放的是client的數據庫記錄id或者user的數據庫記錄id,如果是一個client token,則值爲client id,如果是一個user token ,值爲 user id;
- client_id/cid=oauth_client_details#id,放的就是clientId;azp=Authorized party,放的就是clientId;
- authorities:只有grantype爲client credential時,纔會有這個值,值爲client scope;
- auth_time:發放token的時間
- iss:token endpoint,發放token的url地址
- zid=zone_id
}
-
{
aud:tokenrequest#resourceids的值最後傳到了這裏
} -
rev_sig
-
revocable,jwt時=false,其他時是true?這個單獨研究,jwt也是可已revoke的,注意注意!!!