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

Keycloak向RPT令牌添加permission自定义claims时访问被拒绝

问题根因

这个访问拒绝问题的核心原因是Keycloak Policy Enforcer的默认权限匹配逻辑:当RPT令牌的authorization.permissions节点下存在claims字段时,Enforcer不会直接忽略自定义内容,而是自动触发权限声明强校验——它会默认把permission下所有claims都当成当前权限的生效约束条件,和当前请求上下文、服务端授权策略要求的声明做全量匹配,只要存在未在Keycloak授权策略中定义的未知claims,就会直接判定权限不匹配返回DENY,不会走到后续的资源、scope匹配流程。
另外你注入的自定义claims值格式也存在问题:当前customers:view:country对应的数组值是"[Belgium]",多了一层外层方括号,Keycloak原生生成的声明数组元素是纯字符串值,这个格式异常也会加剧匹配失败的问题。

解决方案

你可以根据自己的需求选对应方案:

  • 方案1:全局关闭claims校验(完全匹配你的预期逻辑)
    在application.properties中添加如下配置,直接禁用Policy Enforcer的声明信息点(CIP)解析与校验逻辑,配置生效后Enforcer只会校验RPT中的资源、scope是否匹配请求要求,完全忽略permission节点下的所有自定义claims内容:
    keycloak.policy-enforcer-config.claim-information-point-resolver-enabled=false
    
    配置添加后重启应用即可生效,只要RPT中携带customers资源的view scope,就算带自定义claims也能正常通过校验。
  • 方案2:适配原生校验逻辑保留claims校验能力
    如果你后续需要基于自定义claims做细粒度权限控制,就不要直接通过RPT签发SPI硬插claims,改用Keycloak官方提供的Claim Information Point SPI注入自定义声明,同时修正claims值格式,把"[Belgium]"改成纯字符串"Belgium",让Enforcer能识别到对应的声明匹配规则,就不会出现误拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:57:23