Skip to content

Instantly share code, notes, and snippets.

@cashwu
Created November 19, 2023 08:00
Show Gist options
  • Save cashwu/5b9e1698bc5d884a87d434040a512d8d to your computer and use it in GitHub Desktop.
Save cashwu/5b9e1698bc5d884a87d434040a512d8d to your computer and use it in GitHub Desktop.

Revisions

  1. Cash Wu created this gist Nov 19, 2023.
    48 changes: 48 additions & 0 deletions API Key Authentication.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    public class ApiKeyAttribute : ServiceFilterAttribute
    {
    public ApiKeyAttribute()
    : base(typeof(ApiKeyAuthorizationFilter))
    {
    }
    }

    public class ApiKeyAuthorizationFilter : IAuthorizationFilter
    {
    private const string ApiKeyHeaderName = "X-API-Key";

    private readonly IApiKeyValidator _apiKeyValidator;

    public ApiKeyAuthorizationFilter(IApiKeyValidator apiKeyValidator)
    {
    _apiKeyValidator = apiKeyValidator;
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
    string apiKey = context.HttpContext.Request.Headers[ApiKeyHeaderName];

    if (!_apiKeyValidator.IsValid(apiKey))
    {
    context.Result = new UnauthorizedResult();
    }
    }
    }

    public class ApiKeyValidator : IApiKeyValidator
    {
    public bool IsValid(string apiKey)
    {
    // Implement logic for validating the API key.
    }
    }

    public interface IApiKeyValidator
    {
    bool IsValid(string apiKey);
    }

    {
    builder.Services.AddSingleton<ApiKeyAuthorizationFilter>();

    builder.Services.AddSingleton<IApiKeyValidator, ApiKeyValidator>();
    }