在进行额外的安全验证流程时,MSAL.NET嵌入式Azure AD登录会显示「浏览器不受支持」

前端开发 2026-07-09

我在一个.NET Framework 4.8的桌面应用中使用MSAL.NET。

Packages:

<package id="Microsoft.Identity.Client" version="4.61.3" targetFramework="net48" />
<package id="Microsoft.Identity.Client.Desktop" version="4.61.3" targetFramework="net48" />

Code:

Code:

var app = PublicClientApplicationBuilder
    .Create(clientId)
    .WithAuthority("https://login.microsoftonline.com/{tenantId}")
    .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
    .WithWindowsEmbeddedBrowserSupport()
    .Build();
...
AuthenticationResult result = await app
    .AcquireTokenInteractive(scopes)
    .WithUseEmbeddedWebView(true)
    .ExecuteAsync()
    .ConfigureAwait(false);

During sign-in:

  1. 用户选择一个账户
  2. 用户输入密码
  3. 微软显示一个类似“让我们保护好您的账户安全”的页面
  4. 点击“Next”会打开另一个页面
  5. 那个页面显示“不受支持的浏览器”

因为这个原因,用户无法完成额外的安全验证流程,登录失败。

有趣的是,如果用户点击“使用其他账户”,然后再次选择完全相同的账户,登录有时会成功。

我的问题是:

  1. 这种行为的可能原因是什么?
  2. 是否有任何受支持的方式强制使用非IE的嵌入式浏览器,例如WebView2,用于Azure AD / Entra ID的嵌入式身份验证?
  3. 当涉及MFA、条件访问、安全信息验证、Windows Hello或类似的额外安全流程时,微软对于桌面应用程序的推荐做法是什么?

解决方案

IE不支持与MSAL.NET相关的现代MFA或条件访问

你可以很容易地切换使用Web Account Manager(WAM),这是微软推荐的方法,或直接使用操作系统的默认浏览器:

  1. WAM(推荐):
var app = PublicClientApplicationBuilder
    .Create(clientId)
    .WithAuthority("https://login.microsoftonline.com/{tenantId}")
    .WithBroker(new BrokerOptions(BrokerOptions.OperatingSystems.Windows))
    .Build();

...

AuthenticationResult result = await app
    .AcquireTokenInteractive(scopes)
    .ExecuteAsync()
    .ConfigureAwait(false);
  1. 操作系统默认浏览器:
var app = PublicClientApplicationBuilder
    .Create(clientId)
    .WithAuthority("https://login.microsoftonline.com/{tenantId}")
    .WithRedirectUri({Your App redirect URL})
    .Build();

...

AuthenticationResult result = await app
    .AcquireTokenInteractive(scopes)
    .WithUseEmbeddedWebView(true)
    .ExecuteAsync()
    .ConfigureAwait(false);
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章