获取Microsoft Graph令牌时触发MsalUiRequiredException错误求助
问题描述
使用用户名密码方式获取Microsoft Graph令牌时触发多重身份验证要求,报错如下:
错误详情
Microsoft.Identity.Client.MsalUiRequiredException: 'AADSTS50076: 由于管理员进行了配置更改,或者您已迁移到新位置,您必须使用多重身份验证才能访问'00000003-0000-0000-c000-000000000000'。Trace ID: 43e876a2-7f8d-4631-9b4d-8c8c875c8900 Correlation ID: ab584317-4e37-41ce-96c1-8610f6bd5293 Timestamp: 2024-05-08 09:40:05Z'
涉事代码片段
try { result = await app.AcquireTokenByUsernamePassword( scopes: scopes, username: this._loginId, password: this._loginPassword ).ExecuteAsync(); }
需求说明
通过用户名+密码方式获取令牌,用于调用Microsoft Graph API(baseUri为https://graph.microsoft.com/beta)
解决方案
AADSTS50076错误的核心原因是:目标Azure AD租户或应用已启用多重身份验证(MFA),而你使用的AcquireTokenByUsernamePassword属于ROPC授权流,该流不支持MFA验证,因此触发拦截。
针对你的需求,提供两种可行方案:
切换至支持MFA的授权流
- 授权码流:适合有交互界面的应用,引导用户通过浏览器完成登录(包含MFA步骤),获取授权码后兑换令牌。
- 设备码流:适合无界面后台应用,用户可在其他设备上打开指定URL输入验证码完成MFA验证,应用后台自动获取令牌。
临时豁免MFA(仅限测试场景)
- 联系Azure AD管理员,将该账号加入MFA豁免列表,或调整对应应用的条件访问策略,允许该账号通过ROPC流访问Microsoft Graph。此方式存在安全隐患,严禁在生产环境使用。
推荐代码示例
授权码流(简化版)
var result = await app.AcquireTokenInteractive(scopes) .WithRedirectUri("https://localhost:你的端口号") .ExecuteAsync();
设备码流
var result = await app.AcquireTokenWithDeviceCode(scopes, deviceCodeResult => { Console.WriteLine(deviceCodeResult.Message); return Task.FromResult(0); }).ExecuteAsync();
内容的提问来源于stack exchange,提问作者Hemant Kumar
相关产品推荐
相关产品推荐

