如何设置app.UseAuthBeareAuthentication以处理不同的Azure B2C自定义策略?

如何设置app.UseAuthBeareAuthentication以处理不同的Azure B2C自定义策略?,azure,owin,azure-ad-b2c,claims,policies,Azure,Owin,Azure Ad B2c,Claims,Policies,我读了这篇文章: 在步骤3,app.useAuthBeareAuthentication被调用3次。。。每个保单一份 我只测试了两个策略:SignInPolicyId和SignUpPolicyId 然而,当我这样做时: app.UseAuthBeareAuthenticationCreateBeareOptionsforPolicySignInPolicyId app.UseAuthBeareAuthenticationCreateBeareOptionsforPolicySignupPolic

我读了这篇文章:

在步骤3,app.useAuthBeareAuthentication被调用3次。。。每个保单一份

我只测试了两个策略:SignInPolicyId和SignUpPolicyId

然而,当我这样做时:

app.UseAuthBeareAuthenticationCreateBeareOptionsforPolicySignInPolicyId app.UseAuthBeareAuthenticationCreateBeareOptionsforPolicySignupPolicyId; 并将其OnValidateId实体传递给提供者,以处理验证声明等。然后,我尝试按如下策略进行筛选:

专用OAuthBeareAuthenticationOptions CreateBeareOptionsforPolicyString策略 { var metadataEndpoint=string.FormatAadInstance,TenantId,policy; TokenValidationParameters tvps=新的TokenValidationParameters { //这就是您指定API只接受来自其自己客户端的令牌的地方 有效期=客户ID, AuthenticationType=策略, NameClaimType=http://schemas.microsoft.com/identity/claims/objectidentifier, validateisuer=true }; 返回新的OAuthBeareAuthenticationOptions { AccessTokenFormat=new JwtFormattvps,new OpenIdConnectCachingSecurityTokenProvidermetadataEndpoint, Provider=新的OAuthBeareAuthenticationProvider { OnValidateIdentity=异步上下文=> { 尝试 { var policyName=identity.FindFirsthttp://schemas.microsoft.com/claims/authnclassreference?.Value; 如果policyName==B2CSignInPolicyId.ToLower//仅登录策略。。。 { //在此处为刚刚将令牌发送回应用程序的策略运行特定代码。。。 } 问题:正在@Azure B2C执行的策略,即我正在调用的策略是登录策略,但提供程序代码被调用了两次。我注册的每个策略(包括注册策略)都调用了一次

问题:是否有更好的方法来执行此操作,以便执行正确的提供程序?如果正在调用的是登录策略,则只执行登录提供程序,反之亦然

编辑:

我遇到了此处描述的相同问题序列包含多个元素:

这是一个例外:

在System.Linq.Enumerable.SingleOrDefault[TSource]IEnumerable`1处 源\r\n位于 Microsoft.Owin.Security.AuthenticationManager.d\u 20.MoveNext\r\n-- 来自引发异常的上一个位置的堆栈结束跟踪 --\r\n位于System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccessTask 任务\r\n位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask 任务\r\n位于 System.Web.Http.HostAuthenticationFilter.d\u 4.MoveNext\r\n-- 来自引发异常的上一个位置的堆栈结束跟踪 --\r\n位于System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccessTask 任务\r\n位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask 任务\r\n位于 System.Web.Http.Controllers.AuthenticationFilterResult.d\u 5.MoveNext\r\n-- 来自引发异常的上一个位置的堆栈结束跟踪 --\r\n位于System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccessTask 任务\r\n位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotificationTask 任务\r\n位于 System.Web.Http.Controllers.ExceptionFilterResult.d_u6.MoveNext


不知怎的,我只打了一个电话就成功了:

app.UseAuthBeareAuthenticationCreateBeareOptionsforPolicyDefaultPolicyId; 注意,我只传递了一个默认策略,比如说登录策略

对于其他策略,它也会影响OnValidateIdentity委托

关于策略名称,我们需要进一步自定义自定义策略,并按所述返回策略Id声明

另一个@SO有助于理解这一点

通过该设置,在执行策略时,我们可以通过查看TFP Trusted Framework策略声明来获取策略名称,如以下屏幕截图所示: