Во избежание ложноположительной ошибки (т. Е. Вы забыли поместить атрибут [Authorize] в один из ваших сотен методов действий или контроллеров, а опытный хакер каким-то образом достиг этой конечной точки), вы также можете добавить соглашение к своим контроллерамтак что они автоматически имеют атрибут [Authorize]. Если вам действительно не требуется авторизация для какого-либо метода действия или контроллера, вы можете использовать для него атрибут [AllowAnonymous].
Сначала вам нужно создать новую политику авторизации и добавить ее к своим службам в вашемКласс Startup.cs в методе ConfigureServices:
services.AddAuthorization(o => {
o.AddPolicy("authwithsomepolicy", p =>
{
p.RequireAuthenticatedUser();
p.RequireClaim("MYPOLICY");
});
});
Затем вы создаете новый класс, который расширяет IControllerModelConvention и выполняет автоматизацию для этой политики для всех ваших контроллеров:
public class AddAuthorizeFilters : IControllerModelConvention
{
public void Apply(ControllerModel controller)
{
controller.Filters.Add(new AuthorizeFilter("authwithsomepolicy"));
}
}
И, наконец,в своем классе Startup.cs вы можете добавить это соглашение в вашу систему Mvc (снова в методе ConfigureServices):
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(setupAction =>
{
setupAction.Conventions.Add(new AddAuthorizeFilters ());
});
}