UaaTokenService里面详细记录了clientdetails 和 users + userinfo是怎么映射到token中去的
userinfo表结构的info结构参见UserInfo类,roles和user_attributes;看UserInfoRowMapper;
从UaaUserRowMapper中,可以看到,user的authorities的来源;groups + 当前zone给用户配置的默认的group(uaa.yml中的oauth.user.authorities字段的配置的值)
1.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的交集;
}
2. authorities:只有grantype为client credential时,才会有这个值,值为client scope;
3. grant_type:用户传输的,需要 oauth_client_details 中的 authorized_grant_types 字段中需要包含当前用户请求的 grant_type
4. 如果是一个user token的话,会有这五个值,client token 则没有{
user_id=users#id,
user_name=users#username,
email=users@email
origin=user 的origin,user的zone_id,仅仅针对user token
auth_time:发放token的时间,user Authentication time;
}
5. exp:当前时间+有效期,有效期在 oauth_client_details 的access_token_validity,如果client上没有配置,则取zone的config字段上配置,如果zone上也没有配置,则使用global token validity seconds(jwt.token.policy.global.accessTokenValiditySeconds)这个全局配置,如果没有指定这个值,那么就是用默认的43200;
6. jti JWT ID Claim uuid请求时生成,无需参数
7. client_id/cid=oauth_client_details#id,放的就是clientId;
8. azp=Authorized party,放的就是clientId;
9. iat=Issued At Claim,now,timeService.getCurrentTimeMillis();
10. sub = Subject Claim,放的是client的数据库记录id或者user的数据库记录id,如果是一个client token,则值为client id,如果是一个user token ,值为 user id;
11. iss:token endpoint,发放token的url地址
12. zid= Zone ID
13. aud:tokenrequest#resourceids的值最后传到了这里,request scope计算而来;
14. rev_sig:Revocation Signature - token revocation hash salted with at least client ID and client secret, and optionally various user values.
15. revocable:请求的token Format是opaque,或者zone表config里配置的TokenPolicy的jwtRevocable的值为true时,此值为true,否则为false