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

如何向Keycloak的EvaluationContext传递额外参数?

能否通过Evaluation Context传递额外属性实现地理位置策略?

是的,现在完全可以实现这个需求!结合Keycloak授权服务的功能,你可以把客户端传递的运行时属性(比如国家代码)注入到Evaluation Context中,用于JavaScript策略的判断。

背景补充

2017年的时候确实没有这个能力,当时核心团队已经在规划相关支持;后续通过KEYCLOAK-5457的迭代,Keycloak完善了授权上下文的属性注入能力,现在最便捷的方式是使用**Claim Information Point(CIP)**来实现。

实现步骤

  1. 配置Claim Information Point注入属性
    在Keycloak管理控制台中,找到你的资源服务器,进入Authorization -> Claim Information Points,添加一个新的CIP:

    • 根据你的客户端传递方式选择来源(比如HTTP请求头、请求参数)
    • 设置提取规则(比如从请求头X-Country-Code提取)
    • 定义属性名称为notkc.country_of_origin(和你的策略代码对应)
    • 关联这个CIP到你的目标策略或资源,确保评估时会自动注入属性
  2. 调整JavaScript策略代码
    修正原代码的语法问题后,策略可以直接从Evaluation Context中获取属性:

    var context = $evaluation.getContext();
    var attributes = context.getAttributes();
    var countryCode = attributes.getValue('notkc.country_of_origin');
    var VALID_COUNTRIES = ['US', 'CA', 'GB']; // 根据你的需求修改允许的国家列表
    
    // 检查国家代码是否在允许范围内
    if (VALID_COUNTRIES.indexOf(countryCode) > -1) {
        $evaluation.grant();
    } else {
        $evaluation.deny();
    }
    

注意事项

  • 确保客户端正确传递属性(比如通过HTTP头、请求参数等方式),和CIP的配置匹配
  • 如果你是直接在授权请求中传递参数,也可以配置CIP从授权请求的参数中提取,灵活调整即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:30