From a1f996b3282b116dcdcf4b54f5d505631f102486 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Tue, 21 Jan 2025 15:23:22 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20`DependentExtensions`=20f=C3=BCr=20exte?= =?UTF-8?q?nsions=20mit=20Abh=C3=A4ngigkeiten=20hinzugef=C3=BCgt=20=20-=20?= =?UTF-8?q?Methoden=20`AddDependentExtensions`=20und=20`TryGetByRoute`=20h?= =?UTF-8?q?inzugef=C3=BCgt,=20um=20die=20Konfiguration=20von=20`AuthApiPar?= =?UTF-8?q?ams`=20und=20das=20Abrufen=20von=20Deskriptoren=20zu=20erm?= =?UTF-8?q?=C3=B6glichen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Config/DependentExtensions.cs | 39 +++++++++++++++++++ src/DigitalData.Auth.API/Program.cs | 3 ++ 2 files changed, 42 insertions(+) create mode 100644 src/DigitalData.Auth.API/Config/DependentExtensions.cs diff --git a/src/DigitalData.Auth.API/Config/DependentExtensions.cs b/src/DigitalData.Auth.API/Config/DependentExtensions.cs new file mode 100644 index 0000000..cecc453 --- /dev/null +++ b/src/DigitalData.Auth.API/Config/DependentExtensions.cs @@ -0,0 +1,39 @@ +using DigitalData.Core.Abstractions.Security; +using Microsoft.Extensions.Options; + +namespace DigitalData.Auth.API.Config +{ + public static class DependentExtensions + { + private static AuthApiParams? _authApiParams; + + private static AuthApiParams AuthApiParams + { + get => _authApiParams + ?? throw new InvalidOperationException( + $"DependentExtensions have not been added to the application or are not configured correctly. {typeof(AuthApiParams)} cannot be provided." + ); + set => _authApiParams = value; + } + + public static IApplicationBuilder AddDependentExtensions(this IApplicationBuilder application) + { + var authApiParamOptions = application.ApplicationServices.GetRequiredService>(); + _authApiParams = authApiParamOptions.Value; + return application; + } + + public static bool TryGetByRoute(this IEnumerable descriptors, string consumerRoute, out IAsymmetricTokenDescriptor descriptor) + { +#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type. + 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)) + return false; + + descriptor = _descriptor; + return true; + } + } +} \ No newline at end of file diff --git a/src/DigitalData.Auth.API/Program.cs b/src/DigitalData.Auth.API/Program.cs index a9017d8..6048147 100644 --- a/src/DigitalData.Auth.API/Program.cs +++ b/src/DigitalData.Auth.API/Program.cs @@ -12,6 +12,7 @@ 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); @@ -116,6 +117,8 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) var app = builder.Build(); +app.AddDependentExtensions(); + issuerSigningKeyInitiator = new Lazy(() => { var factory = app.Services.GetRequiredService();