Необязательная аутентификация с помощью AuthorizationAttribute - PullRequest
0 голосов
/ 25 июня 2019

У меня есть приложение 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...