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进行交换,或者根据需求设为允许所有客户端
- 切换到「Client Scopes」标签,确认已添加
调整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
相关产品推荐
相关产品推荐

