Настройка

Добавим пакет 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.