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

Keycloak中推送Claims至Regex策略及身份属性映射问题

问题:Keycloak v21.0.1中推送Claims到身份属性用于Regex策略评估

我在Keycloak v21.0.1里尝试给token端点推送Claims,用来做基于Regex的策略评估,同时设置response_mode=permissions直接拿评估结果。和Stack Overflow上已有的解答不同,我不需要用JavaScript策略,只针对Regex策略。

目前发送请求后,响应里能看到推送的Claims,但Regex策略就是不触发。翻源码发现,这类策略要求Claims得在evaluation.getContext().getIdentity().getAttributes()里,但我测试时getClaimValue(evaluation, policy)一直返回null。想问下有没有办法把推送的Claims映射到策略评估时的身份属性里?

解决方案

  • 用客户端范围(Client Scope)映射推送的Claims

    1. 新建一个客户端范围,进入该范围的Mappers标签页,添加一个User Attribute类型的映射器
    2. 映射器配置里,把你推送的Claim名称填到User Attribute字段,Token Claim Name也设成一样的值,同时勾选Add to ID token和Add to access token(按需选择)
    3. 把这个客户端范围关联到你用来做策略评估的客户端上
      这样操作后,推送的Claims会被映射到用户身份的属性集合里,Regex策略就能读取到了
  • 自定义SPI扩展(进阶方案)
    如果客户端范围的方式满足不了需求,可以自己写个Keycloak SPI扩展:

    1. 实现AuthorizationProviderFactory和AuthorizationProvider接口
    2. 在evaluate方法里,从请求上下文提取推送的Claims,手动加到evaluation.getContext().getIdentity().getAttributes()里
    3. 把扩展打包后放到Keycloak的providers目录,重启Keycloak就能生效
  • 验证配置是否生效
    配置完成后,发送带推送Claims的请求,同时把Keycloak的org.keycloak.authorization日志级别设为DEBUG,查看日志里evaluation.getContext().getIdentity().getAttributes()是否包含目标Claims,确认Regex策略能正确读取到值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:19:53