BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
OIDC provider + SAML SP backed by Azure Table Storage
Translation pending
SecurityC# · TypeScriptGitHub @authagonalOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Self-hosted OAuth 2.0 / OpenID Connect / SAML 2.0 authentication server for .NET. Pluggable storage: your own PostgreSQL or SQLite, Azure Table Storage, or AWS (DynamoDB / S3 / Secrets Manager).
The open, self-hostable identity server for .NET teams, a fully-featured alternative to Duende IdentityServer and Auth0 that you run. API-only ASP.NET Core server + React login SPA, shipped as a single Docker image, or embedded as a library in your own ASP.NET project. Built on a custom OIDC/OAuth2 protocol implementation, no OpenIddict or Duende dependency.Read the full README ↗The open, self-hostable identity server for .NET teams, a fully-featured alternative to Duende IdentityServer and Auth0 that you run. API-only ASP.NET Core server + React login SPA, shipped as a single Docker image, or embedded as a library in your own ASP.NET project. Built on a custom OIDC/OAuth2 protocol implementation, no OpenIddict or Duende dependency.
☁️ Don't want to run it yourself?
Authagonal Cloud is the fully-managed version, multi-tenant SSO, SCIM, MFA, custom domains, and a management portal, with every feature on every plan and no per-connection SSO fees. Self-host the OSS here, or let us operate it → authagonal.io
docker compose up
This starts the auth server on http://localhost:8080 with an Azurite storage emulator.
| Project | Description |
|---|---|
src/Authagonal.Core | Domain models, interfaces, extensibility contracts |
src/Authagonal.Protocol | Embeddable OIDC / OAuth 2.0 protocol surface, bring your own identity (IOidcSubjectResolver) and storage (IClientStore / IGrantStore / IScopeStore / ISigningKeyStore). No user store, no SAML, no admin UI. |
src/Authagonal.AzureProvider | Azure Table Storage implementation of the stores (formerly Authagonal.Storage) |
src/Authagonal.AwsProvider | AWS implementation, DynamoDB / S3 / Secrets Manager stores and clustering |
src/Authagonal.SqlProvider | Self-hosted SQL implementation, PostgreSQL or SQLite, plus clustering and the DataProtection key ring |
src/Authagonal.Backup | Backup, restore, merge and rollup library for the storage backends |
src/Authagonal.Server | ASP.NET Core host, OIDC, SAML, auth API, admin API |
login-app | React/TypeScript login SPA (Vite), published as @authagonal/login |
tools/Authagonal.Migration | Duende IdentityServer → Table Storage migration tool |
tools/Authagonal.Backup | Azure Table Storage backup tool (incremental support) |
tools/Authagonal.Restore | Azure Table Storage restore tool (upsert, merge, clean modes) |
tests/Authagonal.Tests | Unit tests |
tests/load | k6 load tests (smoke, stress, soak) |
demos/custom-server | Demo: host Authagonal as a library with custom extensions |
demos/sample-app | Demo: client app (API + React SPA) authenticating via Authagonal |
appsettings.jsonRequireConsent flag, scope-aware re-consent, grant management UIPOST /connect/introspect for resource servers to verify token validityPOST /connect/revocation; revocations tracked in a persistent revocation list consulted by the introspection endpointPOST /connect/register for clients to self-register at runtime (opt-in via Auth:DynamicClientRegistrationEnabled), advertised via the discovery document when enabled/api/v1/scopes); custom scopes advertised dynamically by discovery and surfaced on the consent screenBackChannelLogoutUriDisabled, Enabled, Required) with IAuthHook override for per-user control.IProvisioningAppProvider.IAuthHook extensibility point for audit logging, custom validation, webhooks. Multiple implementations run in registration order.| Option | Description |
|---|---|
| Docker image | drawboardci/authagonal, pre-built, configure via env vars and branding.json |
| NuGet library | Reference Authagonal.Server + a provider (Authagonal.AzureProvider, Authagonal.SqlProvider or Authagonal.AwsProvider), call AddAuthagonal(), override services |
| npm package | @authagonal/login, the login SPA as a component library; import base components, override what you need |
| Managed cloud | Authagonal Cloud, we host and operate it for you |
# Build server image
docker build -t authagonal .
# Build migration tool
docker build -f Dockerfile.migration -t authagonal-migration .
# Storage emulator (the default appsettings.json expects Azurite on its default ports)
docker run -d -p 10000-10002:10000-10002 mcr.microsoft.com/azure-storage/azurite
# Server (requires .NET 10 SDK)
dotnet run --project src/Authagonal.Server
# Login app
cd login-app && npm install && npm run dev
var builder = WebApplication.CreateBuilder(args);
// Override extensibility points before AddAuthagonal (multiple hooks supported)
builder.Services.AddSingleton<IAuthHook, MyAuditHook>();
builder.Services.AddSingleton<IEmailService, MyEmailService>();
builder.Services.AddAuthagonal(builder.Configuration);
var app = builder.Build();
app.UseAuthagonal();
app.MapAuthagonalEndpoints();
app.MapFallbackToFile("index.html");
app.Run();
See demos/custom-server/ for a complete example.
Two things every new deployment needs:
Email:ResendApiKey + Email:SenderEmail to activate the built-in Resend sender, or register your own IEmailService before AddAuthagonal. Without one, verification and reset emails are discarded, and since login requires a confirmed email by default, self-registered users can't sign in (set Auth:AutoConfirmEmailDomains to skip verification for your domains).client_credentials client holding the authagonal-admin scope in the Clients: config section. Config-seeded clients are the only way to hold that scope; the API and dynamic registration refuse to grant it (so a runtime client can never escalate).# Quick smoke test
k6 run tests/load/smoke.js -e BASE_URL=http://localhost:8080
# Stress test (ramps to 100 VUs)
k6 run tests/load/stress.js
# Soak test (30 minutes sustained load)
k6 run tests/load/soak.js -e DURATION=30m
See the full documentation for configuration reference.
/api/v1/rolesITenantContext and IKeyManager interfaces for per-tenant configuration and signing key isolationVaultTransitClient for sign/verify, encrypt/decrypt and keyed HMAC against Vault's Transit engine — the building block for an IFieldCipher or IIndexTokenizer. Note: remote JWT signing is not wired; see Extensibility.AddAuthagonal() / UseAuthagonal() extension methods to host in your own projectAuthUser.CustomAttributes, persisted alongside standard profile fieldsbranding.json, CSS custom properties, or install the npm package and override individual componentsprefers-color-scheme detection with persisted user preference. Tenant branding variables override theme defaults.