Подключение схемы
Добавим пакет Microsoft.AspNetCore.OpenApi:
dotnet add Microsoft.AspNetCore.OpenApiВыделим получение схемы в отдельный метод:
using Microsoft.OpenApi.Models;
public class BearerSchemeBuilder
{
public OpenApiSecurityScheme Build() => new()
{
Description = "JWT Authorization header using the Bearer scheme (Example: 'Bearer 12345abcdef')",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Scheme = "bearer",
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "bearer"
},
};
}Создадим Extensions для подключения Swagger. В моем случае это файл DependencyInjection/Swagger.cs в основном проекте Asp.net:
using Microsoft.OpenApi.Models;
public static class Swagger
{
public static IServiceCollection ConfigureSwagger(
this IServiceCollection services
)
{
var bearerBuilder = new BearerSchemeBuilder();
var bearer = bearerBuilder.Build();
return services.AddSwaggerGen(c =>
{
c.AddSecurityDefinition("bearer", bearer);
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
bearer,
new List<string> { }
}
});
}
public static IApplicationBuilder UseConfigureSwagger(
this IApplicationBuilder app
)
{
app.UseSwagger();
app.UseSwaggerUI(s =>
{
s.SwaggerEndpoint("v1/swagger.json", "Api v1");
s.EnablePersistAuthorization();
});
return app;
}
}Подключим в Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.ConfigureSwagger();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseStaticFiles();
app.UseConfigureSwagger();
}
app.UseHttpsRedirection();
app.MapControllers();
app.Run();Предполагается, что вы также предварительно настроили соответствующую аутентификацию.
Свзанные материалы
Как настроить ротацию в Keycloak
Как настроить автоматическое обновление токена доступа
Полезные ссылки
В этом примере кажется есть возможность сделать выбор из юзеров: c# - good practice for adding auth in asp.net (swagger/open api) - Stack Overflow