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

如何在Keycloak中为/{userid}/getEmail配置仅本人可访问策略

Keycloak 接口所有权访问控制配置方案

前置说明:要让路径参数校验生效,你的API服务或者前置网关必须集成Keycloak的策略执行器(Policy Enforcer),且配置开启路径参数透传,否则Keycloak拿不到URI里的{userid}值,策略无法正常判断。

1. 注册受保护的接口资源

  • 进入你要配置的Realm管理控制台,打开对接API鉴权的对应客户端详情页,切换到「Authorization」→「Resources」标签
  • 点击创建资源,按下面填配置:
    • 名称:填Own Email Query Resource,方便后续识别就行
    • URI列表:添加/{userid}/getEmail,如果要限定请求方法,就只勾选GET,和你的接口实际方法对齐
    • 其余配置保持默认,直接保存

2. 创建用户身份匹配策略

最稳定的实现方式是用Keycloak内置的JavaScript策略,逻辑透明不容易配错:

  • 切到「Authorization」→「Policies」标签,策略类型下拉选「JavaScript」,新建策略
  • 名称填Self Email Access Check Policy
  • 策略逻辑区直接贴下面的代码:
// 取当前发起请求的登录用户ID
const requestUserId = $evaluation.context.identity.user.id;
// 从请求上下文取路径里的userid参数,参数名必须和URI模板里的占位符完全一致
const pathUserId = $evaluation.context.attributes['request.pathParam.userid']?.[0];
// 两个ID完全相等时放行,其余场景全部拒绝
$evaluation.grantIf(() => requestUserId === pathUserId);
  • 填完直接保存即可。

3. 绑定资源和策略生成权限

  • 切到「Authorization」→「Permissions」标签,新建「Resource-based Permission」
  • 名称填Query Own Email Permission
  • 关联资源选第一步创建的Own Email Query Resource
  • 关联策略选第二步创建的Self Email Access Check Policy
  • 决策策略选「Affirmative」,其余配置留默认,保存
  • 如果你的Policy Enforcer开了懒加载,记得同步下配置或者重启下服务/网关让配置生效。

效果验证

  • 携带用户A的有效token请求/A的用户ID/getEmail,可以正常访问接口
  • 携带用户A的有效token请求/B的用户ID/getEmail,会直接返回403未授权,符合预期。

常见踩坑点

  • 如果校验一直不生效,先查适配器配置,部分老版本Keycloak适配器默认不会透传路径参数,需要在policy-enforcer配置段加path-parameters: true开启
  • 不要给这个资源绑定其他放行类策略(比如管理员全通策略、公开访问策略),会绕过所有权校验逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:03:18