Вот что я сделал в основном проекте .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"));
}
}
}
вам необходимо правильно реализовать это, так как это тестовый код.
В результате в пользовательском интерфейсе должна появиться новая кнопка «Авторизовать»:
Диалоговое окно авторизации должно выглядеть следующим образом:
Надеюсь, это поможет!