Blazor 应用程序的身份验证处理程序中未调用 HandleRequirementAsync

bit*_*ift 6 c# asp.net-core blazor blazor-server-side

我正在尝试在服务器端 Blazor 应用程序中使用自定义身份验证处理程序。我的处理程序中有一个断点,但它没有被击中。少了什么东西?

要求

public class ValidUserRequirement : IAuthorizationRequirement
{
    public bool MustBeValid { get; }

    public ValidUserRequirement(bool IsValid)
    {
        MustBeValid = IsValid;
    }
}
Run Code Online (Sandbox Code Playgroud)

政策

public static class Policies
{

    public const string IsValidUser = "IsValidUser";


    public static AuthorizationPolicy IsValidUserPolicy()
    {
        return new AuthorizationPolicyBuilder().RequireAuthenticatedUser()                                                  
                                               .Build();
    }
}
Run Code Online (Sandbox Code Playgroud)

处理程序

public class MyAuthHandler : AuthorizationHandler<ValidUserRequirement>
{

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidUserRequirement requirement)
    {    
        // will do checks against Db here
        return Task.CompletedTask;
    }
}
Run Code Online (Sandbox Code Playgroud)

摘自startup.cs

// Our services
services.AddAuthorization(config =>
{
    config.AddPolicy("IsValidUser", policy => policy.AddRequirements(new ValidUserRequirement(true)));
});
services.AddSingleton<IAuthorizationHandler, MyAuthHandler>();
services.AddScoped<AuthenticationStateProvider, ServerAuthenticationStateProvider>();   
Run Code Online (Sandbox Code Playgroud)

Blazor 页面上的 auth 属性

@attribute [Authorize(Policy = Policies.IsValidUser)]   
Run Code Online (Sandbox Code Playgroud)

剃刀应用程序

<Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </Found>
    <NotFound>
        <LayoutView Layout="@typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>
Run Code Online (Sandbox Code Playgroud)

[更新]
好的,我创建了一个新项目,服务器端 blazor,使用 Windows 身份验证并引入了相同的代码。我可以成功地在身份验证处理程序中命中断点,因此我正在处理的项目中出现了一些问题。