У меня есть приложение ASP.NET Core, которое использовало генератор проектов аутентификации AAD.Если пользователь не аутентифицирован, он перенаправляется на страницу входа в AAD.Генератор предоставил следующий фрагмент в Startup.ConfigureServices
services
.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services
.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
Я хотел бы переключить это поведение с помощью флага AppSettings.json.Я попытался условно применить промежуточное программное обеспечение, но, похоже, нет способа условно применить атрибут [Authorization]
на основе параметра AppSettings.json.В разговоре с коллегами они рекомендуют иметь «анонимного» провайдера аутентификации, который генерирует пустой ClaimsPrincipal
, чтобы [Authorization]
проходил.Я изо всех сил пытаюсь найти ясный пример и пытался реализовать это, используя мой собственный AuthenticationHandler<AuthenticationSchemeOptions>
:
public class AnonymousAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public static readonly string AuthenticationScheme = "Anonymous";
public AnonymousAuthenticationHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock)
: base(options, logger, encoder, clock)
{
}
/// <inheritdoc/>
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var principal = new ClaimsPrincipal();
var ticket = new AuthenticationTicket(principal, AuthenticationScheme);
return Task.FromResult(AuthenticateResult.Success(ticket));
}
}
Я не уверен, работает ли это, и не уверен, как на самом деле интегрировать этот обработчик в мой конвейер промежуточного программного обеспечения.Я обычно не нашел четкого решения, но, что еще хуже, похоже, что промежуточное ПО AddScheme
устарело, что используется в большинстве / всех примерах.
Как можно условно применить атрибут [Authorization]
на основе значения AppSettings.json?