在 ASP.NET MVC 4 及以下版本中,我们只需在 Global.asax 中添加以下内容:
GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
你知道在ASP.NET Core MVC中怎么做吗?
在 ASP.NET MVC 4 及以下版本中,我们只需在 Global.asax 中添加以下内容:
GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
你知道在ASP.NET Core MVC中怎么做吗?
根据文档:
您可以通过将筛选器添加到
Startup
类中的ConfigureServices
方法中的MvcOptions.Filters
集合来全局注册筛选器(适用于所有控制器和操作):
您不能将AuthorizeAttribute
添加到MvcOptions.Filters
中。请创建一个AuthorizationPolicy
并使用AuthorizeFilter
:
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireRole("Admin", "SuperUser")
.Build();
services.AddMvc(options =>
{
options.Filters.Add(new AuthorizeFilter(policy));
});
你也可以使用以下代码。这是使用类型而不是实例。
services.AddMvc(options =>
{
options.Filters.Add(typeof(AuthorizeFilter));
});
通过使用依赖注入,您可以解析策略对象。
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeFolder("/"); // Require users to be authenticated.
options.Conventions.AuthorizeFolder("/", "YourPolicyName"); // Require a policy to be full filled globally.
});
在@maxspan的回答基础上,我想补充一下,并且我觉得这个回答非常有帮助。
我需要强制要求我的API中必须出现令牌。这是我最终采取的措施。
Startup.cs
中。AuthorizationPolicy policy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().Build();
services.AddSingleton(policy);
BearerTokenAuthorizationFilter
的过滤器,它继承自AuthorizeFilter
并检索策略依赖项。public class BearerTokenAuthorizationFilter : AuthorizeFilter
{
private readonly AuthorizationPolicy _policy;
public BearerTokenAuthorizationFilter(AuthorizationPolicy policy) : base(policy)
{
_policy = policy;
}
public override async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
//Use the policy here...
}
}
services.AddControllers(options =>
{
options.Filters.Add(typeof(BearerTokenAuthorizationFilter));
});