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

Keycloak TokenExchange:如何让id-token仅含单一aud受众?

Keycloak 26.5.5:TokenExchange后让id_token仅含单一受众

可行,通过调整客户端配置和TokenExchange请求参数就能实现,具体操作如下:

  • 配置source-client的TokenExchange权限
    进入Keycloak控制台,找到source-client的设置页:

    • 切换到「Client Scopes」标签,确认已添加token-exchange客户端作用域(默认通常已包含,若没有则手动添加)
    • 切换到「Advanced」标签,在「Token Exchange Policy」中设置允许与target-client进行交换,或者根据需求设为允许所有客户端
  • 调整TokenExchange请求参数
    发起TokenExchange请求时,除了常规的grant_type、subject_token、subject_token_type等参数,额外加上audience=source-target。这个参数会指定生成的id_token仅将source-target作为受众。

    示例请求(用curl):

    curl -X POST 'http://your-keycloak-domain/auth/realms/your-realm/protocol/openid-connect/token' \
      -H 'Content-Type: application/x-www-form-urlencoded' \
      -d 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
      -d 'client_id=target-client' \
      -d 'client_secret=your-target-client-secret' \
      -d 'subject_token=your-source-access-token' \
      -d 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' \
      -d 'audience=source-target'
    
  • 验证target-client配置(可选但关键)
    进入target-client的设置页:

    • 在「Access Settings」里确保「Valid Redirect URIs」等配置正确
    • 切换到「Advanced」标签,在「Allowed Audiences」中添加source-target,避免因受众不匹配导致token验证失败
    • 检查「Client Scopes」,确认没有强制添加多受众的配置

完成以上步骤后,解析返回的id_token,就能看到aud声明仅包含source-target。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:22:36