keycloak 无法在 access_token 中获取客户端角色
Posted
技术标签:
【中文标题】keycloak 无法在 access_token 中获取客户端角色【英文标题】:keycloak impossible to get client-roles inside access_token 【发布时间】:2021-03-30 13:40:34 【问题描述】:我是 keycloak 的新手,按照互联网上的教程,我配置了一个新的领域“示例”,其中包含客户端“app-backend”、相关角色“admin”(未组合)和领域角色“app- admin”(由客户端角色“admin”组成)。
我还创建了一个用户,并分配了领域角色“管理员”。 此时一切正常,但是,当我通过对 keycloak 服务器(http://localhost:8080/auth/realms/barber-reservation/protocol/openid-connect/token)的 POST API 调用请求访问令牌时,我已经注意到客户端角色不包含在“resource_access”对象中,相反我在其中找到了“account”对象。
这种奇怪的行为使我的 Spring Boot 应用程序的所有授权验证都失败。
在收到访问令牌之后:
"exp": 1608478284,
"iat": 1608477984,
"jti": "5ce17d4d-e3b3-4207-8010-45c0895a9a6a",
"iss": "http://localhost:8080/auth/exmple/app-backend",
"aud": [
"app-backend"
],
"sub": "d3fcc7df-878e-4363-91d6-f06437de5f90",
"typ": "Bearer",
"azp": "app-frontend",
"session_state": "dad4ab85-850a-4c63-8a26-7b3b6de9f821",
"acr": "1",
"allowed-origins": [
"*"
],
"realm_access":
"roles": [
"app-admin"
]
,
"resource_access":
"account":
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
,
"app-backend":
"roles": [
"admin"
]
,
"scope": "openid email profile",
"email_verified": true,
"name": "Name Surname",
"preferred_username": "user@email.com",
"locale": "it",
"given_name": "Name",
"family_name": "Surname",
"email": "user@email.com"
我期待客户端角色部分包含在“resource_access”对象中,如下所示:
"resource_access":
"app-backend":
"roles": [
"admin"
]
关于如何纠正这种奇怪行为的任何想法? 谢谢。
【问题讨论】:
【参考方案1】:这里没有什么奇怪的,来自客户端“app-backend”的客户端角色 admin 位于 resource_access 对象上:
"resource_access":
"account":
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
,
"app-backend":
"roles": [
"admin"
]
,
resource_access
是键值列表,即客户及其角色。
【讨论】:
以上是关于keycloak 无法在 access_token 中获取客户端角色的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 keycloak 保护 python flask rest api 服务