Azure active directory AcquireTokenByAuthorizationCodeAsync之后如何处理MsalUiRequiredException

Azure active directory AcquireTokenByAuthorizationCodeAsync之后如何处理MsalUiRequiredException,azure-active-directory,msal,Azure Active Directory,Msal,我们最近实施了一些条件接收策略,这些策略要求对某些应用程序进行多因素身份验证。其中一个策略强制CA处理一些也通过图形公开的数据集,因此特定的图形范围现在需要多因素身份验证 我正在努力解决如何使用MSAL v3预览库在.Net web应用程序中处理这种情况。我的web应用程序本身不属于CA策略,但它正在尝试请求一个符合CA策略的图形范围 配置身份验证时,我将传递应用程序所需的所有图形范围: app.UseOpenIdConnectAuthentication( new OpenIdConn

我们最近实施了一些条件接收策略,这些策略要求对某些应用程序进行多因素身份验证。其中一个策略强制CA处理一些也通过图形公开的数据集,因此特定的图形范围现在需要多因素身份验证

我正在努力解决如何使用MSAL v3预览库在.Net web应用程序中处理这种情况。我的web应用程序本身不属于CA策略,但它正在尝试请求一个符合CA策略的图形范围

配置身份验证时,我将传递应用程序所需的所有图形范围:

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
    {
        ClientId = ClientId,
        Authority = Authority,
        RedirectUri = RedirectUri,
        Scope = "openid profile offline_access " + GraphScopes,
        PostLogoutRedirectUri = postLogoutRedirectUri,
该身份验证流不会强制用户使用MFA。下一步是AuthorizationCodeReceived事件。在这里,我正在创建一个令牌缓存,并试图通过授权代码获取令牌:

var code = context.Code;
string signedInUserId = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;

TokenCache userTokenCache = new MSALSessionCache(signedInUserId, context.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase). GetMsalCacheInstance();

ConfidentialClientApplication cca = new ConfidentialClientApplication(ClientId, Authority, RedirectUri, new ClientCredential(AppKey), userTokenCache, null);
string[] scopes = GraphScopes.Split(new char[] { ' ' });
AuthenticationResult result = await cca.AcquireTokenByAuthorizationCodeAsync(code, scopes);
AcquireTokenByAuthorizationCodeAsync方法是引发异常的方法-MsalUiRequiredException。例外情况包括我认为需要以某种方式用于强制MFA的声明

这就是我遇到的障碍。我该如何处理这些声明?我看到一些文档表明,在请求令牌时,我应该将它们用作extraQueryParameters,但我还没有找到一种方法允许我这样做。我在SecretentialClientApplicationBuilder类上找到了一个方法,允许我指定声明,但我仍然收到MsalUiRequiredException


目前,我的解决方案是将我的web应用程序添加到原始的条件接收策略中。这将MFA强制放在身份验证流的前端,并满足图形的要求。对我来说,这似乎是不必要的一步。我应该能够处理web应用程序中的错误,并以编程方式强制执行MFA。

MSAL GitHub中似乎有一个专用的解决此问题的软件。下面的快照显示了文档中的相关部分


本质上,我们所需要的只是一种在extraQueryParameters中指定所需声明的方法。在
授权CodeReceived
的委托中,您可以使用以实现所需的结果。特别是,
secretentialclientapplication
方法允许在额外的查询参数中使用所需的声明为授权端点创建自定义URI。将用户重定向到上述端点将强制执行MFA并导致成功生成访问令牌。下面是一个GitHub示例的示例,它使用
GetAuthorizationRequestUrlAsync
方法在额外的查询参数中指定自定义声明。

Yup,这也是我最终得到的结果。我希望MSAL GitHub页面能够特别提到GetAuthorizationRequestUrlAsync方法,而不是试图追踪它。