Stop wrestling with Identity Server. Ship OAuth in minutes.
Two complementary tools: AuthnzNet (local OAuth server) + Noundry.Authnz (client library). Test locally, deploy anywhere.
Local OAuth Server + CLI
The developer-first IdentityServer alternative. A full OAuth 2.0 + OIDC server delivered as a .NET CLI tool. Free forever.
NuGet Client Library
A NuGet package that connects your app to any OAuth IdP - AuthnzNet locally, or Google/GitHub in prod.
Use both for local dev, then swap AuthnzNet for real providers in production. Your app code stays the same.
No API keys, works offline
Change config
Same code, real IdPs
// appsettings.Development.json
{
"OAuth": {
"Providers": {
"authnznet": {
"ClientId": "client_xxx",
"ClientSecret": "secret_yyy",
"Authority": "https://localhost:5000"
}
}
}
}
// appsettings.Production.json
{
"OAuth": {
"Providers": {
"google": {
"ClientId": "xxx.apps.googleusercontent.com",
"ClientSecret": "your-secret"
}
}
}
}
OAuth 2.0 + OIDC server in three commands. The developer-first IdentityServer alternative — free forever.
Install the CLI
dotnet tool install -g Noundry.AuthnzNet.CLI
Create tenant, client, user
ndaz quickstart
Start the server
ndaz serve
# Output from ndaz quickstart:
OAuth Configuration +---------------+------------------------------+ | Authority | https://localhost:5000 | | Client ID | client_4d47e486494d4ab68 | | Client Secret | 1IHI0Wvw1cQQuEJAnsNciWR1 | +---------------+------------------------------+ Test User +----------+---------------+ | Email | dev@localhost | | Password | Password123! | +----------+---------------+
RSA-2048 asymmetric signing with automatic key generation and S256 PKCE for secure public clients
Multiple organizations, users, and clients with full isolation
Full OpenID Connect with discovery endpoints, JWKS, built-in login & consent UI. .NET 10 compatible.
NuGet package to integrate ANY OAuth IdP into your .NET app. Works with AuthnzNet locally or real providers in production.
Install Package
dotnet add package Noundry.Authnz
Add Services
builder.Services.AddNoundryOAuth(config)
Use Middleware
app.UseNoundryOAuth()
using Noundry.Authnz.Extensions;
builder.Services.AddNoundryOAuth(config, options =>
{
options.OnOAuthSuccess = async ctx =>
{
// Create local user account
return new OAuthSuccessResult
{
AdditionalClaims = new List<Claim>
{
new("app_user_id", user.Id.ToString())
}
};
};
});
app.UseNoundryOAuth();
AuthnzNet
Local
Microsoft
GitHub
Apple
Custom
Create local user accounts after OAuth success. No boilerplate "OAuthSuccess" catch pages.
OnOAuthSuccess delegate
Simple inline handler in Program.cs
IOAuthSuccessHandler interface
Full DI support for complex scenarios
New/Returning User Detection
Different handlers for onboarding vs login
Custom Claims Injection
Add user_id, roles, permissions to cookie
Install a dotnet tool, run quickstart, and you have a complete OAuth server. Free forever — no license fees, no usage limits.