From 2efdee79a3620ac65a1efe5099ecfe3897c158a5 Mon Sep 17 00:00:00 2001 From: ThompsonNye Date: Sat, 30 Aug 2025 20:09:00 +0200 Subject: [PATCH] Map Keycloak name claim --- PresentPortal.ApiService/Program.cs | 61 +++++++++++++++++------------ 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/PresentPortal.ApiService/Program.cs b/PresentPortal.ApiService/Program.cs index 6f34789..39cda27 100644 --- a/PresentPortal.ApiService/Program.cs +++ b/PresentPortal.ApiService/Program.cs @@ -12,16 +12,17 @@ builder.Services.AddProblemDetails(); builder.Services.AddOpenApi(); builder.Services.AddAuthentication() - .AddKeycloakJwtBearer(ServiceNames.Keycloak, KeycloakConstants.Realm, options => - { - var keycloakHost = builder.Configuration.GetValue($"services:{ServiceNames.Keycloak}:http:0") - ?? throw new InvalidOperationException("Keycloak host is not configured."); - - options.MetadataAddress = $"{keycloakHost}/realms/{KeycloakConstants.Realm}/.well-known/openid-configuration"; - options.RequireHttpsMetadata = !builder.Environment.IsDevelopment(); - options.Audience = KeycloakConstants.ClientId; - options.Authority = keycloakHost; - }); + .AddKeycloakJwtBearer(ServiceNames.Keycloak, KeycloakConstants.Realm, options => + { + var keycloakHost = builder.Configuration.GetValue($"services:{ServiceNames.Keycloak}:http:0") + ?? throw new InvalidOperationException("Keycloak host is not configured."); + + options.MetadataAddress = $"{keycloakHost}/realms/{KeycloakConstants.Realm}/.well-known/openid-configuration"; + options.RequireHttpsMetadata = !builder.Environment.IsDevelopment(); + options.Audience = KeycloakConstants.ClientId; + options.Authority = keycloakHost; + options.TokenValidationParameters.NameClaimType = "preferred_username"; + }); builder.Services.AddAuthorization(); var app = builder.Build(); @@ -31,29 +32,37 @@ app.UseExceptionHandler(); if (app.Environment.IsDevelopment()) { - app.MapOpenApi(); + app.MapOpenApi(); } app.UseAuthentication(); app.UseAuthorization(); string[] summaries = - ["Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"]; + ["Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"]; app.MapGet("/weatherforecast", () => - { - var forecast = Enumerable.Range(1, 5).Select(index => - new WeatherForecast - ( - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] - )) - .ToArray(); - return forecast; - }) - .WithName("GetWeatherForecast") - .RequireAuthorization(); + { + var forecast = Enumerable.Range(1, 5).Select(index => + new WeatherForecast + ( + DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + Random.Shared.Next(-20, 55), + summaries[Random.Shared.Next(summaries.Length)] + )) + .ToArray(); + return forecast; + }) + .WithName("GetWeatherForecast") + .RequireAuthorization(); + +app.MapGet("/test", (HttpContext context) => +{ + _ = context.User; + return TypedResults.Ok(); +}) + .WithName("Test Endpoint") + .RequireAuthorization(); app.MapDefaultEndpoints(); @@ -61,5 +70,5 @@ app.Run(); record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) { - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); } \ No newline at end of file