Использование политик для чего-то подобного не является чрезмерным Вам нужно требование:
public class WhitelistRequirement: IAuthorizationRequirement
{
}
Обработчик:
public class WhitelistHandler : AuthorizationHandler<WhitelistRequirement>
{
// Implement a constructor to inject dependencies, such as your whitelist
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
WhitelistRequirement requirement)
{
if (isInWhitelist) // Your implementation here
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
Зарегистрируйте оба в ConfigureServices
:
services.AddAuthorization(options =>
options.AddPolicy("WhitelistPolicy",
b => b.AddRequirements(new WhitelistRequirement())));
services.AddSingleton<IAuthorizationHandler, WhitelistHandler>();
Тогда используйте вашу политику:
[Authorize(Policy = "WhitelistPolicy")]
Вы можете применить политику глобально с помощью глобального фильтра:
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.AddRequirements(new WhitelistRequirement())
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
})
Результирующее поведение для неаутентифицированных или запрещенных пользователей зависит от реализации поведения «вызов» и «запрет» в обработчике аутентификации вашего приложения.
См. здесь .