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

ReactJS前端经Azure AD认证后调用Django Rest接口返回invalid token问题排查

配置排查及解决方案清单

1. 前端令牌获取逻辑校验

  • 调用MSAL的acquireTokenSilent/acquireTokenPopup接口请求令牌时,传入的scope必须是Django应用注册暴露的完整权限路径,格式为api://<Django应用注册客户端ID>/<自定义scope名称>,不能仅传入scope名称,也不能混用前端自身权限、Graph API权限。
  • 确认你放在Authorization请求头里的是*访问令牌(Access Token)*而非ID令牌:ID令牌仅用于前端自身身份校验,无法通过后端API的认证。你可以将令牌粘贴到jwt.io解析,确认aud(受众)字段的值为Django应用注册的客户端ID或应用ID URI,而非前端应用的客户端ID。
  • 校验令牌有效期:解析后查看exp字段的时间戳,确认请求时令牌未过期。

2. Django侧认证配置校验

  • 若使用django-auth-adfs等Azure AD认证库,确认AUDIENCE配置项的值和令牌解析出的aud字段完全一致,不能误填为前端应用的客户端ID。
  • 确认TENANT_ID配置项为你的Azure AD租户实际ID,和令牌解析出的tid字段完全匹配,不可使用公共租户、错填租户ID。
  • 若配置了ISSUER参数,确认值和令牌解析出的iss字段完全一致:v1端点格式为https://sts.windows.net/<租户ID>/,v2端点格式为https://login.microsoftonline.com/<租户ID>/v2.0。

3. Azure AD应用注册配置校验

  • 查看Django应用注册的「清单」配置,确认accessTokenAcceptedVersion参数值和你前端请求的端点版本匹配:v1端点对应值为null或1,v2端点对应值为2,版本不匹配会直接导致签名校验失败。
  • 确认前端应用注册的「API权限」页中,添加的Django自定义scope授权状态为「已授予<你的租户名称>」,如果是需要管理员同意的权限,必须由租户管理员完成授权,仅用户级授权无法生成有效访问令牌。
  • 排除Django应用注册配置了IP限制、条件访问策略的可能,这类规则会导致合法令牌被拦截。

4. 快速定位方法

复制前端拿到的完整Bearer Token,直接用Postman等工具携带该令牌请求Django接口:

  • 若Postman同样返回invalid token,说明问题出在令牌本身或Django的认证配置,无需排查前端请求逻辑
  • 若Postman请求成功,说明是前端请求头格式错误,确认Authorization头格式为Bearer <令牌值>,Bearer和令牌值之间有且仅有一个空格,无多余换行、特殊字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:12:04