From 3fbd9402c38918267adfb0e619d0ba912ce607a0 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Tue, 3 Feb 2026 11:06:44 -0600 Subject: [PATCH] chore: remove OpenApi and configure JWT authentication schemes --- src/Directory.Packages.props | 3 +- src/FiscalOS.API/FiscalOS.API.csproj | 1 - src/FiscalOS.Infra/.editorconfig | 1 + .../Authentication/JwtOptions.cs | 33 +++++++++++++++++++ .../ServiceCollectionExtensions.cs | 5 +++ 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 6a86a48..71e0fc5 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -4,7 +4,6 @@ - runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -13,4 +12,4 @@ - \ No newline at end of file + diff --git a/src/FiscalOS.API/FiscalOS.API.csproj b/src/FiscalOS.API/FiscalOS.API.csproj index abc943c..9bf99ec 100644 --- a/src/FiscalOS.API/FiscalOS.API.csproj +++ b/src/FiscalOS.API/FiscalOS.API.csproj @@ -1,7 +1,6 @@ - runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/FiscalOS.Infra/.editorconfig b/src/FiscalOS.Infra/.editorconfig index 5135c0e..91dc7c3 100644 --- a/src/FiscalOS.Infra/.editorconfig +++ b/src/FiscalOS.Infra/.editorconfig @@ -1,3 +1,4 @@ [*.cs] dotnet_diagnostic.CA1062.severity = none +dotnet_diagnostic.CA5404.severity = none diff --git a/src/FiscalOS.Infra/Authentication/JwtOptions.cs b/src/FiscalOS.Infra/Authentication/JwtOptions.cs index 1ee9187..7d81870 100644 --- a/src/FiscalOS.Infra/Authentication/JwtOptions.cs +++ b/src/FiscalOS.Infra/Authentication/JwtOptions.cs @@ -1,3 +1,5 @@ +using Microsoft.AspNetCore.Authentication.JwtBearer; + namespace FiscalOS.Infra.Authentication; public sealed record JwtOptions @@ -6,6 +8,8 @@ public sealed record JwtOptions public string Audience { get; init; } = string.Empty; public string Secret { get; init; } = string.Empty; public int ExpiryInMinutes { get; init; } = 5; + + public SymmetricSecurityKey Key => new(Encoding.UTF8.GetBytes(Secret)); } public sealed record JwtOptionsSetup : IConfigureOptions @@ -22,4 +26,33 @@ public sealed record JwtOptionsSetup : IConfigureOptions { _configuration.GetSection(SectionName).Bind(options); } +} + +public sealed class JwtBearerOptionsSetup(IOptions jwtOptions) : IConfigureNamedOptions +{ + private readonly JwtOptions _jwtOptions = jwtOptions.Value; + + public void Configure(string? name, JwtBearerOptions options) + { + options.TokenValidationParameters = new() + { + ValidIssuer = _jwtOptions.Issuer, + ValidAudience = _jwtOptions.Audience, + IssuerSigningKey = _jwtOptions.Key, + ValidateIssuer = true, + ValidateAudience = true, + ValidateIssuerSigningKey = true, + ValidateLifetime = true, + }; + + if (name is Schemes.AllowExpiredTokens) + { + options.TokenValidationParameters.ValidateLifetime = false; + } + } + + public void Configure(JwtBearerOptions options) + { + Configure(Options.DefaultName, options); + } } \ No newline at end of file diff --git a/src/FiscalOS.Infra/DependencyInjection/ServiceCollectionExtensions.cs b/src/FiscalOS.Infra/DependencyInjection/ServiceCollectionExtensions.cs index e5754c2..2b5ea40 100644 --- a/src/FiscalOS.Infra/DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/FiscalOS.Infra/DependencyInjection/ServiceCollectionExtensions.cs @@ -5,12 +5,17 @@ public static class ServiceCollectionExtensions public static IServiceCollection AddInfrastructure(this IServiceCollection services) { services.AddSingleton(TimeProvider.System); + services.ConfigureOptions(); + services.ConfigureOptions(); + services.AddSingleton(TokenGenerator.From); services.AddSingleton(PasswordHasher.From); + services.ConfigureOptions(); services.AddDbContext(); services.AddHostedService(); + return services; } } \ No newline at end of file