Installation
Docker (recommended)
Pull and run the pre-built image:
docker run -p 8080:8080 \
-e Storage__ConnectionString="your-connection-string" \
-e Issuer="https://auth.example.com" \
authagonal
Docker Compose
For local development with Azurite (Azure Storage emulator):
services:
azurite:
image: mcr.microsoft.com/azure-storage/azurite
ports:
- "10000:10000"
- "10001:10001"
- "10002:10002"
authagonal:
build: .
ports:
- "8080:8080"
environment:
- Storage__ConnectionString=DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;TableEndpoint=http://azurite:10002/devstoreaccount1;
- Issuer=http://localhost:8080
depends_on:
- azurite
docker compose up
Building from Source
Prerequisites
- .NET 10 SDK
- Node.js 22+
Build
# Build everything
dotnet build
# Build the login SPA
cd login-app
npm ci
npm run build
# Run the server
dotnet run --project src/Authagonal.Server
Docker Build
# Server image (multi-stage: builds SPA + .NET in one image)
docker build -t authagonal .
# Migration tool
docker build -f Dockerfile.migration -t authagonal-migration .
As a Library (NuGet)
Reference the Authagonal packages in your own ASP.NET Core project:
<PackageReference Include="Authagonal.Server" Version="x.y.z" />
<PackageReference Include="Authagonal.Storage" Version="x.y.z" />
Then compose it into your Program.cs:
builder.Services.AddSingleton<IAuthHook, MyAuditHook>(); // Custom hook
builder.Services.AddSingleton<IEmailService, MyEmailService>(); // Custom email
builder.Services.AddAuthagonal(builder.Configuration);
var app = builder.Build();
app.UseAuthagonal();
app.MapAuthagonalEndpoints();
app.MapFallbackToFile("index.html");
app.Run();
See Extensibility for all override points and demos/custom-server/ for a complete example.
Login SPA (npm)
The login UI is published as an npm package for customization:
npm install @authagonal/login
The package ships compiled JS and CSS — import components and styles directly in your own React app. See Custom Server for a full walkthrough.
Migration Tool
For migrating from Duende IdentityServer + SQL Server:
docker run authagonal-migration -- \
--Source:ConnectionString "Server=...;Database=...;" \
--Target:ConnectionString "DefaultEndpointsProtocol=https;..." \
[--DryRun true] \
[--MigrateRefreshTokens true]
See Migration for details.