AuthServer
Clients
Choose the right client onboarding path for owned apps, portable clients, and compatibility clients.
A client is the app that sends a user into SqlOS sign in and later exchanges the auth code for tokens.
SqlOS now supports three client onboarding paths:
CIMD when the client_id is a stable HTTPS metadata documentDCR for public clients that still expect runtime registrationIf you are unsure, start with the first path.
For a one-app setup, use Single-Application Setup before reaching for explicit client seeding.
This is the default path for most teams.
Use it for:
Open Auth Server > Clients.

Recommended for first-party apps:
builder.AddSqlOS<AppDbContext>(options =>
{
options.AuthServer.SeedOwnedWebApp(
"my-web-app",
"My Web Application",
"http://localhost:3000/auth/callback",
"https://app.example.com/auth/callback");
});curl -X POST http://localhost:5062/sqlos/admin/auth/api/clients \
-H "Content-Type: application/json" \
-d '{
"clientId": "my-web-app",
"name": "My Web Application",
"audience": "sqlos",
"redirectUris": ["http://localhost:3000/auth/callback"]
}'| Field | Required | Description |
|---|---|---|
clientId | Yes | Unique identifier (e.g., my-web-app) |
name | Yes | Display name |
audience | No | Token audience claim |
redirectUris | Yes | Allowed callback URIs for OAuth flows |
Use the CLI / Device OAuth dashboard preset or seed a CLI client:
builder.AddSqlOS<AppDbContext>(options =>
{
options.AuthServer.SeedCliClient(
"acme-cli",
"Acme CLI",
"https://api.acme.com",
"openid",
"profile",
"email",
"offline_access");
});CLI clients are public clients. They do not require redirect URIs and are allowed to use:
urn:ietf:params:oauth:grant-type:device_coderefresh_tokenSee CLI OAuth for the complete flow and polling rules.
Clients seeded in startup code are marked as startup managed. Their configuration is reapplied on every restart, so changes made in the dashboard will be overwritten.
Dashboard-created clients are fully editable and persist across restarts.
Use CIMD when a public client uses a stable HTTPS client_id that points to its own metadata document.
This is the better long-term public-client story because the client keeps its own metadata and SqlOS can fetch and cache it.
Enable it with:
builder.AddSqlOS<AppDbContext>(options =>
{
options.AuthServer.ClientRegistration.Cimd.Enabled = true;
});That path is especially useful for:
Use DCR only when a real client still expects runtime registration.
Enable it with:
builder.AddSqlOS<AppDbContext>(options =>
{
options.AuthServer.ClientRegistration.Dcr.Enabled = true;
});SqlOS keeps this path intentionally narrow in v1:
token_endpoint_auth_method=noneRegister separate clients for each frontend. The example stack seeds three:
auth.SeedOwnedWebApp("example-web", "Example Web", "http://localhost:3010/auth/callback");
auth.SeedOwnedWebApp("example-angular", "Example Angular", "http://localhost:4200/auth/callback");
auth.SeedOwnedNativeApp("example-expo", "Example Expo", "sqlos-expo://auth-callback");