基于策略的授权在ASP.NET Core中不起作用

Rob*_*lls 3 c# asp.net asp.net-core

我试图基于此文章在.net core 2.1中运行基于策略的授权:https : //docs.microsoft.com/zh-cn/aspnet/core/security/authorization/policies?view= aspnetcore-2.1

但是,我似乎无法解决。

在下面的示例中,我注释掉了context.suceeed行,因此我以为对usercontroller的api调用将失败。

但是我的API调用已被接受。

我究竟做错了什么?

这是我的startup.cs

public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddSingleton<IAuthorizationHandler, VerifyAuthCookieHandler>();

        services.AddAuthorization(options =>
        {
            options.AddPolicy("VerifyAuthCookie", policy =>
                policy.Requirements.Add(new VerifyAuthCookieRequirement()));
        });

        services.AddMvcCore().AddJsonFormatters();

    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的经理

public class VerifyAuthCookieHandler : AuthorizationHandler<VerifyAuthCookieRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   VerifyAuthCookieRequirement requirement)
    {

        //context.Succeed(requirement);

        return Task.CompletedTask;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的要求:

public class VerifyAuthCookieRequirement : IAuthorizationRequirement
{

    public VerifyAuthCookieRequirement()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

最后,我的控制器:

[Route("api/[controller]")]
[Authorize(Policy = "VerifyAuthCookie")]
public class UserController : Controller
{

}
Run Code Online (Sandbox Code Playgroud)

如果我在HandleRequirementAsync中添加代码并设置一个断点,那么在调试时它不会被击中,因此我的Handler似乎根本没有被调用。

use*_*336 9

您应该在Startup类的Configure方法中的app.UseAuthentication();之前调用app.UseMvc();。这会将ASP.NET Core身份验证中间件添加到请求管道。

由于您正在使用,因此services.AddMvcCore()我们需要手动配置授权服务,因此某些事情services.AddMvc()会自动为您完成。我们应该添加.AddAuthorization()到中IMvcCoreBuilder。这将添加默认的身份验证和授权服务以及PolicyEvaluator。

如果您对将在DI容器中注册的确切服务感兴趣,则应单击链接。