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

Keycloak公共客户端能否使用同一授权跨资源服务器校验资源访问权限

问题结论

你描述的场景完全可以实现,Client does not support permissions报错是客户端配置不全导致的,按以下步骤调整即可。


配置步骤

  • 配置所有资源服务器客户端
    进入Keycloak后台,打开你用到的所有资源服务器客户端(比如你请求里的resource-server-1)的设置页,切换到「授权」标签,将「授权已启用」开关打开并保存,Keycloak只有开启该配置后才允许客户端参与UMA权限校验。如果需要严格拦截无权限请求,确认同页面的「策略执行者模式」设置为ENFORCING(默认值)。

  • 配置Public客户端权限

    1. 打开你用来获取初始access token的public-client设置页,在「能力设置」中确认「直接访问授权已启用」开关为打开状态,否则密码授权模式会被拦截。
    2. 在同页面的「客户端作用域」配置中,给该客户端添加uma_authorization作用域,确保客户端有资格发起UMA ticket申请请求。
    3. 修改你获取初始token的代码,请求参数的scope字段新增uma_authorization,修改后代码如下:
    export access_token=`curl --silent -u public-client:1 \
        -k -d "grant_type=password&username=${USER_NAME}&password=${USER_PASSWORD}&scope=email profile uma_authorization" \
        -H "Content-Type:application/x-www-form-urlencoded" \
        ${KEYCLOAK_TOKEN_URL} | jq '.access_token' -r`
    
    1. 可解码拿到的access token,确认payload中存在uma_authorization字段且值为true,代表配置生效。
  • 配置资源与权限策略
    进入每个资源服务器客户端的「授权」-「资源」页面,提前创建好所有受保护的资源条目,再切换到「权限」「策略」页面,将资源的访问权限和对应用户/角色/用户组绑定,否则即使拿到UMA ticket,访问资源时也会被判定为无权限。

  • 跨资源服务器权限申请配置
    如果你需要用同一个RPT(即UMA ticket返回的权限令牌)访问多个资源服务器,发起UMA ticket请求时传入多个audience参数即可,示例代码如下:

    curl --silent -X POST \
      ${KEYCLOAK_TOKEN_URL} \
      -H "Authorization: Bearer ${access_token}" \
      --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
      --data "audience=resource-server-1" \
      --data "audience=resource-server-2"
    

    按上述配置完成后,返回的RPT会包含所有指定资源服务器的访问权限,无需重复申请。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:06:05