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

Azure AD v2.0端点OpenID Connect响应缺失token_type问题咨询

解决Azure AD v2.0令牌端点仅返回id_token的问题

我刚帮几个朋友排查过类似的迁移问题,这种情况几乎都是请求参数不符合v2.0端点的要求导致的——v2.0比旧版端点对参数的校验严格得多,很多旧版里能“蒙混过关”的参数组合在v2.0里会直接返回不完整的响应。下面是最常见的几个排查方向:

1. 检查response_type或grant_type参数

如果你的令牌请求只返回id_token,很大概率是你没有请求其他类型的令牌:

  • 如果你用的是授权码流(推荐生产环境使用),grant_type必须设为authorization_code,并且在之前的授权请求中,response_type要包含code(比如response_type=code id_token)。这样令牌端点才会返回access_token、token_type、id_token等完整字段。
  • 如果你误将response_type设为纯id_token(隐式流的一种),那令牌端点只会返回id_token,不会有其他字段。

2. 确认scope参数是否正确

v2.0端点要求scope参数必须明确指定,不能留空:

  • 必须包含openid(这是OIDC协议的基础要求);
  • 如果需要获取access_token,还要加上对应的API权限范围,比如微软Graph的https://graph.microsoft.com/.default,或者你自定义API的api://your-client-id/access_as_user。
    举个例子,正确的scope应该是:scope=openid https://graph.microsoft.com/.default

3. 验证请求格式和必填参数

确保你的请求满足以下要求:

  • 请求方法是POST,Content-Type必须为application/x-www-form-urlencoded(v2.0不接受JSON格式的请求体);
  • 机密客户端(比如后端服务)必须带上client_secret,公共客户端(比如SPA)则不需要;
  • 所有参数(比如code、redirect_uri)必须和授权阶段使用的完全一致,不能有拼写错误或路径差异。

正确请求示例(授权码流)

POST https://login.microsoftonline.com/common/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

client_id=your-client-id-here
&scope=openid https://graph.microsoft.com/.default
&code=your-authorization-code-from-auth-step
&redirect_uri=https://your-app.com/callback
&grant_type=authorization_code
&client_secret=your-client-secret-here  # 仅机密客户端需要

额外提醒:隐式流的特殊情况

如果你用的是隐式流(不推荐生产用),token_type和access_token是直接返回在授权回调URL的哈希参数里的,不需要再调用令牌端点。这种情况下你应该检查回调URL的哈希部分,而不是令牌端点的响应。

先从这几个方向排查,大概率能解决问题——如果还是不行,可以把你的完整请求参数(脱敏后)贴出来,我再帮你看细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:52:56