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.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
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.查看完整 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.