Настройка
Добавим пакет Microsoft.AspNetCore.Authentication.JwtBearer:
dotnet add Microsoft.AspNetCore.Authentication.JwtBearerПодготовим данные конфигураций
Добавим в конфигурационный файл необходимую информацию о SSO используемую для аутентификации по схеме Bearer:
{
"Auth": {
"Authority": "http://keycloak.test/realms/test",
"Audience": "webapi"
}
}Создадим модель с данными аутентификации для конфига Configuration/AuthSettings.cs:
public class AuthSettings
{
public string Authority { get; set; }
public string Audience { get; set; }
}Создадим корневую модель для конфига Configuration/ApiConfiguration.cs:
public class ApiConfiguration
{
public AuthSettings Auth { get; set; }
}Создадим расширение для подключения схемы аутентификации
Создадим Extensions для подключения схемы аутентификации. В моем случае это файл DependencyInjection/Authentication.cs в основном проекте Asp.net:
public static class Authentication
{
/// <summary>
/// Конфигурация аутентификации
/// </summary>
public static IServiceCollection ConfigureAuthentication(
this IServiceCollection services,
IConfiguration configuration
)
{
var config = configuration.Get<ApiConfiguration>();
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.Authority = config.Auth.Authority;
x.Audience = config.Auth.Audience;
x.IncludeErrorDetails = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidateIssuer = false,
ValidateLifetime = true,
RequireExpirationTime = true
};
});
return services;
}
public static IApplicationBuilder UseConfigureAuthentication(this IApplicationBuilder builder) =>
builder
.UseAuthentication();
}Подключим расширение схемы аутентификации
В Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.ConfigureAuthentication(builder.Configuration);
var app = builder.Build();
app.UseHttpsRedirection();
app.UseConfigureAuthentication();
app.MapControllers();
app.Run();Если SSO использует собственный сертификат, то нам также требуется добавить сертификат через приложение или через хранилище сертификатов.
Также для удобства тестирования конечных точек можно настроить соответствующую аутентификацию в Swagger.