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

OAuth 2.0授权过程中如何成功获取id_token?

OAuth 2.0 对接获取id_token的正确配置

id_token 不是原生OAuth 2.0协议定义的返回字段,它是构建在OAuth2之上的OpenID Connect(OIDC)身份层协议的专属返回值,纯OAuth2授权接口无论怎么调都不会返回这个字段,请求没拿到id_token基本是配置缺失或错误导致的:

必补核心参数

不管是首次用授权码换token,还是用refresh_token刷新token,缺了这个参数100%拿不到id_token:

  • 必须在请求参数中加入scope=openid,这是OIDC协议的强制要求,只有scope包含openid时,授权服务器才会触发OIDC逻辑,签发和返回id_token。如果需要同时获取用户基础资料、邮箱等信息,可以在scope里追加profile、email等值,多个scope用空格分隔。

两类常见请求场景的正确配置

1. 授权码流程首次换取token

请求地址为对应平台的OIDC token端点(注意不要用平台旧版纯OAuth2的token接口,部分平台两个接口是分开的),POST表单参数除了client_id、client_secret、redirect_uri,还要补全:

  • grant_type固定赋值为authorization_code
  • 传入授权流程拿到的code参数(这个场景不需要传refresh_token)
  • 部分平台要求额外传nonce参数做请求防重放,按平台要求生成随机字符串传入即可

2. 用refresh_token刷新获取id_token

也就是当前调试的场景,除了已经传入的client_id、client_secret、refresh_token、redirect_uri,还要补全:

  • grant_type固定赋值为refresh_token
  • 必传scope=openid,注意传入的scope范围不能超过首次授权时用户同意的scope范围,否则请求会被拒绝
  • 检查当前使用的refresh_token本身是否是OIDC流程签发的:如果首次发起授权请求时就没带openid scope,服务器签发的refresh_token本身不绑定身份上下文,用它刷新永远拿不到id_token,这种情况需要重新走完整授权流程,初始授权阶段就带上openid scope,拿到新的合法refresh_token再调用刷新接口。

其他容易踩的配置问题

  • 确认在授权平台创建的应用已经开启OIDC相关权限:部分平台默认仅开启纯OAuth2权限,只返回access_token和refresh_token,需要手动在应用配置页开启「OIDC身份认证」「返回id_token」类的开关,否则参数传对也不会返回对应字段。
  • 检查client_secret的传输方式:部分平台要求将client_id和client_secret放在HTTP Basic Auth请求头中传输,而非放在POST表单参数里,传参位置错误可能导致接口走纯OAuth2逻辑,不返回id_token。

正确的刷新请求示例

POST /oidc/token HTTP/1.1
Host: 你对接的授权服务域名
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
client_id=你的应用客户端ID&
client_secret=你的应用客户端密钥&
refresh_token=你持有的有效刷新令牌&
redirect_uri=你在平台配置的合法回调地址&
scope=openid profile email

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:39:25