From 47aeb49a404c6f5af3ca3e1d00865d39242504ff Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Tue, 21 Jan 2025 16:38:09 +0100 Subject: [PATCH] =?UTF-8?q?feat(ClaimExtensions):=20Erm=C3=B6glicht=20die?= =?UTF-8?q?=20Bereitstellung=20von=20Methoden=20zum=20Abrufen=20spezifisch?= =?UTF-8?q?er=20Anspr=C3=BCche.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Config/DependentExtensions.cs | 2 +- .../Controllers/ClaimExtensions.cs | 17 +++++++++++++++++ src/DigitalData.Auth.API/Program.cs | 9 ++------- .../Services/DIExtensions.cs | 2 +- 4 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 src/DigitalData.Auth.API/Controllers/ClaimExtensions.cs diff --git a/src/DigitalData.Auth.API/Config/DependentExtensions.cs b/src/DigitalData.Auth.API/Config/DependentExtensions.cs index cecc453..0bc6d3d 100644 --- a/src/DigitalData.Auth.API/Config/DependentExtensions.cs +++ b/src/DigitalData.Auth.API/Config/DependentExtensions.cs @@ -29,7 +29,7 @@ namespace DigitalData.Auth.API.Config descriptor = null; #pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type. if (!AuthApiParams.Consumers.TryGetByRoute(consumerRoute, out var consumer) - || descriptors.TryGet(AuthApiParams.Issuer, consumer.Audience, out var _descriptor)) + || !descriptors.TryGet(AuthApiParams.Issuer, consumer.Audience, out var _descriptor)) return false; descriptor = _descriptor; diff --git a/src/DigitalData.Auth.API/Controllers/ClaimExtensions.cs b/src/DigitalData.Auth.API/Controllers/ClaimExtensions.cs new file mode 100644 index 0000000..0cbf91a --- /dev/null +++ b/src/DigitalData.Auth.API/Controllers/ClaimExtensions.cs @@ -0,0 +1,17 @@ +using System.Security.Claims; + +namespace DigitalData.Auth.API.Controllers +{ + public static class ClaimExtensions + { + public static string? GetName(this ClaimsPrincipal user) => user.FindFirstValue(ClaimTypes.NameIdentifier); + + public static bool TryGetName(this ClaimsPrincipal user, out string name) + { +#pragma warning disable CS8601 // Possible null reference assignment. + name = user.GetName(); +#pragma warning restore CS8601 // Possible null reference assignment. + return name is not null; + } + } +} \ No newline at end of file diff --git a/src/DigitalData.Auth.API/Program.cs b/src/DigitalData.Auth.API/Program.cs index 6048147..5ff2882 100644 --- a/src/DigitalData.Auth.API/Program.cs +++ b/src/DigitalData.Auth.API/Program.cs @@ -6,13 +6,10 @@ using DigitalData.Core.Application; using DigitalData.Core.Security; using DigitalData.UserManager.Application; using DigitalData.UserManager.Application.DTOs.User; -using DigitalData.UserManager.Application.Services; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.JsonWebTokens; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; -using System.Security.Claims; -using static System.Net.Mime.MediaTypeNames; var builder = WebApplication.CreateBuilder(args); @@ -24,7 +21,7 @@ var apiParams = config.Get() ?? throw new InvalidOperationExcepti // Add services to the container. builder.Services.Configure(config); -builder.Services.AddConsumerApiServiceFromConfiguration(config); +builder.Services.AddConsumerApiService(config); builder.Services.AddCryptoFactory(config.GetSection("CryptParams")); builder.Services.AddJwtSignatureHandler(api => new Dictionary { @@ -96,9 +93,7 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) ValidateAudience = true, ValidAudience = apiParams!.DefaultConsumer.Audience, ValidateLifetime = true, - IssuerSigningKey = issuerSigningKeyInitiator?.Value, - NameClaimType = JwtRegisteredClaimNames.Name, - RoleClaimType = ClaimTypes.Role + IssuerSigningKey = issuerSigningKeyInitiator?.Value }; options.Events = new JwtBearerEvents diff --git a/src/DigitalData.Auth.API/Services/DIExtensions.cs b/src/DigitalData.Auth.API/Services/DIExtensions.cs index ca42801..395915b 100644 --- a/src/DigitalData.Auth.API/Services/DIExtensions.cs +++ b/src/DigitalData.Auth.API/Services/DIExtensions.cs @@ -6,7 +6,7 @@ namespace DigitalData.Auth.API.Services { public static class DIExtensions { - public static IServiceCollection AddConsumerApiServiceFromConfiguration(this IServiceCollection services, IConfiguration configuration, string key = "ConsumerAPIs") + public static IServiceCollection AddConsumerApiService(this IServiceCollection services, IConfiguration configuration, string key = "ConsumerAPIs") { var consumerApis = configuration.GetSection(key).Get>() ?? throw new InvalidOperationException($"No Consumer list found in {key} in configuration."); services.AddSingleton(Options.Create(consumerApis));