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

OAuth2兑换IMAP权限令牌报AADSTS65001错误排查

该错误的核心逻辑是AAD判定你的应用未获取到访问目标资源所需的委托权限,和你感知到的“已完成用户/管理员同意”不符,基本都是配置不匹配导致的,按以下优先级排查即可:

  • scope参数前后不一致
    检查你最初引导用户跳转的授权URL中的scope参数,必须和兑换令牌时POST提交的scope参数完全一致。你当前换token时用的scope是offline_access https://outlook.office.com/IMAP.AccessAsUser.All,如果构造授权URL时漏写了Exchange Online的IMAP权限、错写成Microsoft Graph下的Mail.Read类邮件权限,用户实际同意的权限集合和你换token时申请的权限不匹配,就会触发该错误。
  • 权限配置的资源/类型错误
    到Azure门户应用注册页检查已配置的权限:
    1. IMAP.AccessAsUser.All必须属于Exchange Online资源(资源标识为https://outlook.office.com),不能是Microsoft Graph下的同名/同类邮件权限,两个资源的权限体系完全独立、不互通。
    2. 你授予管理员同意的必须是委托权限,而非应用程序权限。授权码流属于用户委托场景,应用程序权限仅对客户端凭据流(无用户参与的后台服务场景)生效,就算给应用程序权限开了管理员同意,委托场景下也不会被识别。
  • 端点/回调地址不匹配
    你兑换令牌用的是固定租户ID5426ee07-9b73-4a9e-8075-395ab439c6fa的端点,检查授权URL是否使用了同一个租户路径。如果授权时用了/common端点,且登录用户是外部访客/个人微软账号,实际授权流程会发生在用户的归属租户,和你换token时指定的租户不互通,权限配置不会生效。另外要确认redirect_uri在三处完全字符级匹配:Azure门户应用注册的回调配置、授权URL的参数、换token的POST参数,哪怕差一个末尾斜杠、端口号、HTTP/HTTPS协议的差异,都会触发权限校验异常。
  • 授权码失效
    授权码有效期仅10分钟,且只能使用一次。如果你之前已经用同一个code发起过换token请求(哪怕第一次请求因为参数错误失败),再复用code就会触发该类错误。另外注意回调接口拿到的code是URL编码格式,提交POST表单时要做正确的编码处理,不要直接拼接未转义的原始字符串。

快速验证方案:
重新构造授权请求,所有参数和换token请求保持完全一致,授权端点固定为https://login.microsoftonline.com/5426ee07-9b73-4a9e-8075-395ab439c6fa/oauth2/v2.0/authorize,额外带上prompt=consent参数强制弹出同意页面,重新走授权流程拿到新code后立刻发起换token请求,不要复用旧code。

额外提醒:你贴出的client_secret已经公开泄露,立刻到Azure门户的「证书和密码」页面删除该密钥,重新生成新的密钥使用,避免应用被未授权调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:42:29