我目前正在学习 OIDC 和 KeyCloak,但我并没有真正了解访问令牌的性质。我创建了两个客户端(authz-test 和 app_authz_2)并为访问资源的用户分配了不同的角色,然后我在 app_authz_2 上进行了身份验证和请求授权,但我可以看到 resource_access
声明还包括 authz-test 的角色。>
"resource_access": {
"authz-test": {
"roles": [
"watcher_role"
]
},
"app_2_authz": {
"roles": [
"app_2_role"
]
},
"account": {
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
这个 resource_access 声明就是我所说的。我担心访问令牌最终会因资源访问声明而膨胀,所以我在问是否可能,以及不包含不同资源服务器的 resource_access 声明是否是一个好习惯。
答案 0 :(得分:0)
通过开箱即用的安装,新创建的客户端会被分配一个名为 roles
的默认客户端范围。如果您查看该客户端范围,您将看到一个名为 client roles
的映射器,类型为 User Client Role
。
由于此映射器未配置特定客户端,因此默认情况下,所有客户端的所有客户端角色都将编码到令牌中。
您可能需要考虑从您的客户端取消分配默认的 roles
客户端范围,并为您的客户端分配一个 User Client Role
类型的映射器,而不是只映射该特定客户端的客户端角色。