Как создать схему аутентификации, которая ничего не делает в .Net Core? - PullRequest
0 голосов
/ 09 апреля 2019

При разработке, подготовке и производстве мои контроллеры используют атрибут [Authorize] , чтобы гарантировать, что только авторизованные пользователи имеют доступ к методам. Это, очевидно, требует подключения к службе аутентификации.

Однако я и моя команда много путешествуем на поездах и самолетах, где есть ненадежный сервис WIFI. Удаление этих атрибутов для разработки в поездке на самолете, а затем их повторное использование для производства не является приемлемым решением. Я хотел бы иметь возможность настроить веб-сервис так, чтобы он ничего не делал при попытке аутентификации, чтобы мы могли продолжать разработку в длительных поездках. Я видел несколько пользовательских схем аутентификации, но есть ли простой способ просто «ничего не делать» или быстрый пример простой пользовательской схемы аутентификации, которая ничего не делает?

1 Ответ

0 голосов
/ 09 апреля 2019

ОК, это можно понять из более сложных примеров:

    public class LocalAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions>
    {
        public LocalAuthenticationHandler(
            IOptionsMonitor<AuthenticationSchemeOptions> options,
            ILoggerFactory logger,
            UrlEncoder encoder,
            ISystemClock clock)
            : base(options, logger, encoder, clock)
        {
        }

        protected override Task<AuthenticateResult> HandleAuthenticateAsync()
        {
            // Create an empty claims identity and pass it off as a valid user.  This is only valid in a local build environment to bypass the
            // web-based authentication service.
            var principal = new ClaimsPrincipal(new ClaimsIdentity(Array.Empty<Claim>(), this.Scheme.Name));
            return Task.FromResult(AuthenticateResult.Success(new AuthenticationTicket(principal, this.Scheme.Name)));
        }
    }

И в файле startup.cs

    serviceCollection.AddAuthentication(options => options.DefaultAuthenticateScheme = "Local")
        .AddScheme<AuthenticationSchemeOptions, LocalAuthenticationHandler>("Local", null);
...