在进行额外的安全验证流程时,MSAL.NET嵌入式Azure AD登录会显示「浏览器不受支持」
我在一个.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:
- 用户选择一个账户
- 用户输入密码
- 微软显示一个类似“让我们保护好您的账户安全”的页面
- 点击“Next”会打开另一个页面
- 那个页面显示“不受支持的浏览器”
因为这个原因,用户无法完成额外的安全验证流程,登录失败。
有趣的是,如果用户点击“使用其他账户”,然后再次选择完全相同的账户,登录有时会成功。
我的问题是:
- 这种行为的可能原因是什么?
- 是否有任何受支持的方式强制使用非IE的嵌入式浏览器,例如WebView2,用于Azure AD / Entra ID的嵌入式身份验证?
- 当涉及MFA、条件访问、安全信息验证、Windows Hello或类似的额外安全流程时,微软对于桌面应用程序的推荐做法是什么?
解决方案
IE不支持与MSAL.NET相关的现代MFA或条件访问
你可以很容易地切换使用Web Account Manager(WAM),这是微软推荐的方法,或直接使用操作系统的默认浏览器:
- 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);
- 操作系统默认浏览器:
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。