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

开启MFA的Outlook Office 365,如何用用户名和应用密码通过API获取Access Token?

问题分析与解决方案

你遇到的AADSTS50126错误核心原因及解决方法如下:

"error": "invalid_grant",
"error_description": "AADSTS50126: Error validating credentials due to invalid username or password.",
"error_codes": [50126]

为什么应用密码无法使用?

OAuth2的password授权类型不支持启用MFA用户的应用密码。应用密码是微软为兼容旧版基础认证(比如直接用IMAP/POP输入密码)设计的,本质是绕开MFA的特殊凭证,但它和OAuth2的认证体系不兼容——password flow要求输入用户的真实账户密码,而启用MFA后,单纯的密码验证会触发二次验证,password flow本身无法处理MFA步骤,因此直接返回凭证无效的错误。

权限配置说明

你当前配置的「IMAP access for ALL」(对应Exchange Online的IMAP.AccessAsUser.All委派权限)已经满足IMAP访问的需求,不需要额外添加其他委派API权限。但要确认两点:

  • 该权限为委派权限(而非应用权限)
  • 已完成权限同意(管理员全局同意或用户个人同意,取决于租户设置)

正确解决步骤

要支持MFA用户的IMAP OAuth2访问,必须放弃password授权类型,改用支持MFA的授权流程:

1. 授权码流(Authorization Code Flow)

适合有前端交互的场景:

  • 引导用户跳转至Azure AD登录页,完成MFA验证
  • 获取授权码后,用授权码兑换Access Token
  • 所需Scope:https://outlook.office365.com/IMAP.AccessAsUser.All offline_access(添加offline_access可获取Refresh Token,后续无需重复登录)

2. 设备码流(Device Code Flow)

适合无前端的终端/服务场景:

  • 应用向Azure AD请求设备码,得到一个验证URL和验证码
  • 用户通过浏览器访问该URL,输入验证码并完成MFA验证
  • 应用轮询Azure AD获取Access Token
  • 需确保Azure AD应用注册中开启了「公共客户端」身份(在「身份验证」设置中配置),Scope与上述一致

额外提醒

  • 微软已逐步淘汰password授权类型,尤其是针对MFA用户,后续可能完全禁用,建议尽快切换到合规的授权流程
  • 不要尝试绕开MFA验证使用password flow,这不符合微软安全规范,也会带来数据风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:56:09