Как настроить логин swagger API с помощью кнопки авторизации в asp.net web api? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть проект веб-API asp.net, интегрированный с Swagger UI. Я новичок в Swagger. Я установил все необходимые пакеты OWIN для аутентификации. Он отлично работает с почтальоном, но когда я даю атрибут авторизации в любом контроллере, он не работает в Swagger.

Как я могу создать панель входа для аутентификации в swagger и как автоматически добавлять bearer + access_token с каждым запросом в swagger после успешного входа? Спасибо заранее

1 Ответ

0 голосов
/ 13 июня 2019

Вот что я сделал в основном проекте .net (2.2).Это может помочь вам в настройке аутентификации с помощью Swagger.Я использую swashbackle и Microsoft.OpenApi:

1-Добавить поддержку аутентификации:

services.AddAuthentication("ApiKey").AddScheme<AuthenticationSchemeOptions, ApiKeyAuth>("ApiKey", null);

2-Добавить это в AddSwaggerGen в ConfigureServicesМетод:

            setup.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme
            {
                Type = SecuritySchemeType.ApiKey,
                Name = "ApiKey",
                In = ParameterLocation.Header,
                Description = "Please enter the API Key provided to you"
            });

            setup.AddSecurityRequirement(new OpenApiSecurityRequirement
            {
                {
                    new OpenApiSecurityScheme
                    {
                        Reference = new OpenApiReference {
                            Type = ReferenceType.SecurityScheme,
                            Id = "ApiKey" }
                    }, new List<string>() }
            });

3-Создайте свой обработчик аутентификации:

public class ApiKeyAuth : AuthenticationHandler<AuthenticationSchemeOptions>
{

    public ApiKeyAuth(
         IOptionsMonitor<AuthenticationSchemeOptions> options,
         ILoggerFactory logger,
         UrlEncoder encoder,
         ISystemClock clock)
         : base(options, logger, encoder, clock)
    {
    }
    protected override Task<AuthenticateResult> HandleAuthenticateAsync()
    {

        if (!Request.Headers.ContainsKey("ApiKey"))
        {
            return Task.FromResult(AuthenticateResult.Fail("Missing ApiToken"));
        }
        try
        {
            var identity = new ClaimsIdentity( new List<Claim>() { new Claim(ClaimTypes.Sid, "1") },Scheme.Name);
            var principal = new ClaimsPrincipal(identity);
            var ticket = new AuthenticationTicket(principal, Scheme.Name);
            return Task.FromResult(AuthenticateResult.Success(ticket));
        }
        catch (Exception)
        {

            return Task.FromResult(AuthenticateResult.Fail("Invalid Authentication Failed"));
        }

    }
}

вам необходимо правильно реализовать это, так как это тестовый код.

В результате в пользовательском интерфейсе должна появиться новая кнопка «Авторизовать»:

enter image description here

Диалоговое окно авторизации должно выглядеть следующим образом:

enter image description here

Надеюсь, это поможет!

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