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

Keycloak的Permissions与Policy仅在Evaluate页生效,授权码流无authorization字段问题

Keycloak 角色关联Scope授权配置不生效解决方案

功能正确使用逻辑

  • Keycloak Authorization模块的权限评估逻辑和标准OAuth2授权码流程是相互独立的:Evaluate标签页是主动触发的单次权限模拟评估,默认不会自动将评估结果注入到授权码流程返回的标准ID Token/Access Token中。
  • 你需要实现的「登录时根据用户角色自动授予对应Scope并返回」的需求,需要手动将细粒度授权评估能力和标准OAuth授权流程做绑定,显式触发评估并将结果写入指定Token字段。

遗漏配置项排查清单

1. 客户端基础授权配置校验

  • 确认客户端配置页的Authorization Enabled开关保持开启,同时进入Authorization Settings页,确认Policy Enforcement Mode设置为PERMISSIVE(调试阶段建议用这个值,生产可以换成ENFORCING),不要设置为DISABLED。
  • 确认你创建的需要关联角色的Scope是授权范围(Authorization Scope),而非普通OAuth客户端Scope,且该Scope已经和对应资源绑定、权限规则也同时关联了该Scope和基于角色的匹配策略。

2. 授权码流程请求参数补全

走授权码流程请求授权端点时,必须补充以下参数:

  • scope参数除了常规的openid等基础Scope外,需要包含你自定义的授权Scope。
  • 额外添加permission参数:如果需要申请所有绑定的资源和Scope,直接传permission=*;如果只需要申请指定资源的指定Scope,格式为permission=资源ID#ScopeID。
  • 注意Keycloak 18及以上版本需要先进入Realm Settings->Security Defenses->Brute Force Detection,将permission参数加入到允许参数列表,避免请求被拦截。

3. 授权结果Token映射配置

如果要让权限评估结果出现在返回的Token中,需要添加自定义协议映射器:

  • 进入客户端配置页->Mappers->点击Create,Mapper Type选择Authorization Permissions。
  • 配置Token Claim Name为authorization,勾选Add to access token选项,可按需选择是否将该字段加入ID Token、用户信息端点返回结果。
  • 保存配置后需要重新走完整授权码流程获取新Token,才能看到字段生效。

4. 配置正确性验证

如果完成以上配置后仍然不生效,可以先调用权限评估接口验证授权规则本身是否正确:
用用户的有效Access Token调用POST请求到Keycloak的Token端点,请求Body参数如下:

grant_type=urn:ietf:params:oauth:grant-type:uma-ticket
audience=你的客户端ID
permission=*
response_mode=permissions

如果该接口能返回你预期的Scope列表,说明授权规则配置正确,问题出在请求参数或映射器配置上;如果返回空结果,重新检查资源、Scope、策略、权限的绑定关联关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:06:02