You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus如何配置使用Client Roles替代Realm Roles(无对应配置项)

在Quarkus中使用Keycloak客户端角色(Client Roles)实现权限控制

问题背景

在Spring Boot应用中,通过配置Keycloak的use-resource-role-mappings: true,可实现基于客户端角色(而非领域角色)的权限控制:指定客户端为test-client,给该客户端分配test-role1角色后,用@RolesAllowed("test-role1")注解就能控制接口访问,运行正常。

但在Quarkus应用中,找不到对应的use-resource-role-mappings配置项,目前只有当创建领域角色test-role1并分配给用户时,接口权限控制才生效。而实际需求必须使用客户端角色,且JWT令牌中已包含test-client的test-role1客户端角色(令牌片段如下)。

相关配置与代码

Spring Boot配置

keycloak:
  realm: myrealm
  resource: test-client
  auth-server-url: http://localhost:8080
  use-resource-role-mappings: true # 控制从领域还是客户端层面映射角色
  bearer-only: true

Spring Boot接口代码

@Path("/my-path")
@RolesAllowed("test-role1")
public String testPath() {
    return "success";
}

Quarkus当前配置

quarkus.oidc.client-id=test-client
quarkus.oidc.auth-server-url=http://localhost:8080/realms/myrealm
quarkus.oidc.credentials.secret=test-client-secret
# 缺少对应use-resource-role-mappings的配置

JWT令牌片段

"realm_access": {
    "roles": [
      "offline_access",
      "uma_authorization",
      "default-roles-myrealm"
    ]
  },
"resource_access": {
    "test-client": {
      "roles": [
        "test-role1"
      ]
    },
    "account": {
      "roles": [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  }

解决方案

在Quarkus中,通过配置角色来源为resource_access,即可实现读取客户端角色用于权限控制,具体配置如下:

quarkus.oidc.client-id=test-client
quarkus.oidc.auth-server-url=http://localhost:8080/realms/myrealm
quarkus.oidc.credentials.secret=test-client-secret
# 指定从resource_access中读取角色(对应Spring Boot的use-resource-role-mappings: true)
quarkus.oidc.roles.source=resource_access

说明

  1. 当quarkus.oidc.roles.source设置为resource_access时,Quarkus会自动从JWT的resource_access字段中,匹配当前配置的quarkus.oidc.client-id对应的角色列表(即resource_access.test-client.roles)。
  2. 接口代码无需修改,依然使用@RolesAllowed("test-role1")注解即可实现基于客户端角色的权限控制。

内容的提问来源于stack exchange,提问作者moyajih568

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:45:00