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

生成Access Token时触发AADSTS65001错误,求原因及解决方案

错误核心成因

你碰到的这个错误,本质是用户或管理员没有完成对应权限的有效授权——哪怕你已经操作了管理员同意,大概率是以下细节没做到位:

1. 权限类型选错了

你用的是OAuth授权码流程(需要用户登录授权),必须用Microsoft Graph的委派权限,而不是应用权限。如果Azure后台加的是应用权限,或者管理员同意的是应用权限,用户授权后照样拿不到token。

2. 请求范围和已同意的范围不匹配

你的授权请求里包含offline_access,但如果管理员同意的时候没加这个范围,或者授权URL里的范围拼写错了,就会触发consent_required。注意offline_access是委派权限里的特殊范围,得单独添加并同意。

3. 授权码出问题了

  • 授权码只能用一次,重复用同一个码换token直接就invalid_grant报错。
  • 生成授权码时用的租户ID,和换token时填的租户ID不一致,也会验证失败。

4. 没强制重新授权

如果用户之前拒绝过你的权限请求,或者本地缓存了旧的授权状态,哪怕后来管理员同意了,用户的授权流程还是没更新。这时候得在授权URL里加prompt=consent参数,强制用户重新确认权限。

5. 管理员同意没生效

可能管理员同意操作没完成:比如点了“授予管理员同意”后页面没加载完,或者操作的管理员权限不够(得是全局管理员、应用管理员这类角色),导致权限状态还是“未授予”。


具体修复步骤

  1. 核对权限类型和状态

    • 进Azure应用注册的「API权限」页面,检查加的所有权限都是Microsoft Graph的委派权限(别选应用权限)。
    • 确认User.Read、Files.Read、offline_access这三个委派权限都加了,且状态显示「已授予[你的租户名]」。如果没显示已授予,重新点「授予管理员同意」等操作完成。
  2. 检查授权URL的参数

    • 确保授权URL里的scope参数严格是offline_access User.Read Files.Read,别拼错字或者多空格少空格。
    • 给授权URL加prompt=consent参数,强制用户重新确认权限,示例:
      https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize?client_id={client-id}&response_type=code&redirect_uri={redirect-uri}&scope=offline_access%20User.Read%20Files.Read&prompt=consent
      
  3. 保证授权码只用一次

    • 每次拿到授权码后只用来换一次token,失败了就让用户重新生成新的授权码。
    • 换token请求里的tenant_id、client_id、redirect_uri,必须和生成授权码时的参数完全一致。
  4. 确认应用认证配置

    • 「Authentication」标签里,你的Web应用重定向URI要正确添加,类型选「Web」。
    • 「Allow public client flows」设为false是对的(你的应用是保密客户端,不需要公共客户端流),不用改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:44:57