How to use a custom API Key in Elsa
When using default authentication and UseAdminApiKey with the following startup code in Elsa, it defaults to an empty GUID.
elsa.UseDefaultAuthentication(auth => auth.UseAdminApiKey());
So how do you use your own custom API key? Start by creating a class that implements the AspNetCore.Authentication.ApiKey.IApiKeyProvider interface. Here is an example class that gets a key from appsettings.json.
using AspNetCore.Authentication.ApiKey;
using Elsa.Identity.Models;
using System.Security.Claims;
namespace ElsaServer.Extensions;
public class AppSettingsApiKeyProvider : IApiKeyProvider
{
private string? defaultApiKey;
public AppSettingsApiKeyProvider(IConfiguration configuration)
{
defaultApiKey = configuration["ApiKey"];
}
public Task<IApiKey?> ProvideAsync(string key)
{
if (key != defaultApiKey)
return Task.FromResult<IApiKey?>(null);
var claims = new List<Claim> { new("permissions", "*") };
var apiKey = new ApiKey(key, "admin", claims);
return Task.FromResult<IApiKey>(apiKey)!;
}
}
Then specify your new class in UseDefaultAuthentication like…
elsa.UseDefaultAuthentication(auth => auth.UseApiKeyAuthorization<AppSettingsApiKeyProvider>());
Don’t forget to add an ApiKey setting to your appsettings.json.