如何在ASP.NET Core中添加全局`AuthorizeFilter`或`AuthorizeAttribute`?

时间:2017-02-01 05:29:06

标签: asp.net-core asp.net-core-mvc

ASP.NET MVC 4 及以下,我们只需在Global.asax中添加以下内容:

GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });

知道如何在 ASP.NET Core MVC 中执行此操作吗?

3 个答案:

答案 0 :(得分:40)

来自docs

  

您可以全局注册过滤器(适用于所有控制器和操作)   将它添加到的MvcOptions.Filters集合中   ConfigureServices类中的Startup方法:

您无法将AuthorizeAttribute添加到MvcOptions.Filters。创建AuthorizationPolicy并使用AuthorizeFilter

var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .RequireRole("Admin", "SuperUser")
        .Build();

services.AddMvc(options =>
{
    options.Filters.Add(new AuthorizeFilter(policy));
});

答案 1 :(得分:5)

如果您使用Razor Page flavor of the ASP.NET Core 2.0,可以添加全局过滤器,如下所示:

services.AddMvc()
.AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizeFolder("/"); // Require users to be authenticated.
            options.Conventions.AuthorizeFolder("/", "YourPolicyName"); // Require a policy to be full filled globally.
        });

答案 2 :(得分:4)

您也可以使用以下代码。这是使用类型而不是实例。

services.AddMvc(options =>
{
    options.Filters.Add(typeof(AuthorizeFilter));
});

使用依赖注入,您可以解析策略对象。