ForgeRock v7.1.0令牌交换返回Invalid Token Exchange问题求助
解决方案
1. 确认OAuth2客户端已开启令牌交换权限
你使用的client_id为steve的OAuth2客户端需要先开启对应功能:
- 登录AM管理控制台,进入
Realms > Root > Applications > OAuth 2.0 > Clients > steve - 切换到
Advanced标签页,找到Grant Types配置项,确认已添加urn:ietf:params:oauth:grant-type:token-exchange到允许的授权类型列表 - 同页面找到
Token Exchange Allowed Subject Token Types配置项,确认已添加urn:ietf:params:oauth:token-type:access_token - 找到
Token Exchange Allowed Requested Token Types配置项,确认已添加urn:ietf:params:oauth:token-type:id_token - 保存配置后重启AM实例清空缓存
2. 修正令牌交换请求参数
你当前的请求缺少两个必填参数:
- ForgeRock AM要求令牌交换时必须指定目标受众
audience - ID Token属于OpenID Connect范畴的令牌,
scope必须携带openid作用域才能正常生成
修正后的完整请求如下:
curl --location --request POST 'http://am.example.com:8080/am/oauth2/realms/root/access_token' \ --header 'Authorization: Basic c3RldmU6cGFzc3dvcmQ=' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \ --data-urlencode 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' \ --data-urlencode 'subject_token=BS8vVbJ4EEygzdEE3jQH-xsKW9w' \ --data-urlencode 'scope=cn openid' \ --data-urlencode 'requested_token_type=urn:ietf:params:oauth:token-type:id_token' \ --data-urlencode 'audience=steve'
3. 可选:检查全局令牌交换配置
如果上述操作后仍报错,检查全局OAuth2配置:
- 进入
Realms > Root > Services > OAuth2 Provider - 切换到
Advanced标签页,确认Enable Token Exchange开关已开启
内容的提问来源于stack exchange,提问作者Steve Davis
相关产品推荐
相关产品推荐

