diff --git a/WorkFlow.API/Attributes/ApiKeyAuthAttribute.cs b/WorkFlow.API/Attributes/ApiKeyAuthAttribute.cs index fc7f7ac..f9a0e64 100644 --- a/WorkFlow.API/Attributes/ApiKeyAuthAttribute.cs +++ b/WorkFlow.API/Attributes/ApiKeyAuthAttribute.cs @@ -3,9 +3,9 @@ using WorkFlow.API.Filters; namespace WorkFlow.API.Attributes { - public class ApiKeyAuthAttribute : ServiceFilterAttribute + public class APIKeyAuthAttribute : ServiceFilterAttribute { - public ApiKeyAuthAttribute() + public APIKeyAuthAttribute() : base(typeof(ApiKeyAuthFilter)) { } diff --git a/WorkFlow.API/Extensions/DIExtensions.cs b/WorkFlow.API/Extensions/DIExtensions.cs new file mode 100644 index 0000000..24b7dd5 --- /dev/null +++ b/WorkFlow.API/Extensions/DIExtensions.cs @@ -0,0 +1,10 @@ +using WorkFlow.API.Filters; + +namespace WorkFlow.API.Extensions +{ + public static class DIExtensions + { + public static IServiceCollection AddAPIKeyAuth(this IServiceCollection services, Func isValidKey, string apiKeyHeaderName = "X-API-Key") + => services.AddSingleton(provider => new(isValidKey: isValidKey, apiKeyHeaderName: apiKeyHeaderName)); + } +} \ No newline at end of file diff --git a/WorkFlow.API/Filters/ApiKeyAuthFilter.cs b/WorkFlow.API/Filters/ApiKeyAuthFilter.cs index 052b391..25dda53 100644 --- a/WorkFlow.API/Filters/ApiKeyAuthFilter.cs +++ b/WorkFlow.API/Filters/ApiKeyAuthFilter.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Mvc; namespace WorkFlow.API.Filters { - public class ApiKeyAuthFilter(Func isValidKey, string apiKeyHeaderName = "X-API-Key") : IAuthorizationFilter + public class APIKeyAuthFilter(Func isValidKey, string apiKeyHeaderName = "X-API-Key") : IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { diff --git a/WorkFlow.API/Program.cs b/WorkFlow.API/Program.cs index adcadf5..6031d68 100644 --- a/WorkFlow.API/Program.cs +++ b/WorkFlow.API/Program.cs @@ -10,6 +10,8 @@ using Microsoft.IdentityModel.Tokens; using WorkFlow.API.Models; using NLog; using NLog.Web; +using WorkFlow.API.Extensions; +using Microsoft.Extensions.Configuration; var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); logger.Info("Logging initialized."); @@ -34,6 +36,8 @@ try { Claims = user.ToClaimList().ToDictionary(claim => claim.Type, claim => claim.Value as object) }); + if (config.GetValue("API-Key") is string apiKey) + builder.Services.AddApiKeyAuth(key => key == apiKey); builder.Services.AddControllers();