ObjectStackObjectStack

Auth Config

Auth Config protocol schemas

Source: packages/spec/src/system/auth-config.zod.ts

TypeScript Usage

import { AdvancedAuthConfigSchema, AudienceConfigSchema, AuthConfigSchema, AuthPluginConfigSchema, AuthProviderConfigSchema, EmailAndPasswordConfigSchema, EmailVerificationConfigSchema, MutualTLSConfigSchema, OidcProviderConfigSchema, OidcProvidersConfigSchema, SocialProviderConfigSchema } from '@objectstack/spec/system';
import type { AdvancedAuthConfig, AudienceConfig, AuthConfig, AuthPluginConfig, AuthProviderConfig, EmailAndPasswordConfig, EmailVerificationConfig, MutualTLSConfig, OidcProviderConfig, OidcProvidersConfig, SocialProviderConfig } from '@objectstack/spec/system';

// Validate data
const result = AdvancedAuthConfigSchema.parse(data);

AdvancedAuthConfig

Advanced / low-level Better-Auth options

Properties

PropertyTypeRequiredDescription
crossSubDomainCookies{ enabled: boolean; additionalCookies?: string[]; domain?: string }optionalShare auth cookies across subdomains (critical for *.example.com multi-tenant)
useSecureCookiesbooleanoptionalForce Secure flag on cookies
disableCSRFCheckbooleanoptional⚠ Disable CSRF check — security risk, use with caution
cookiePrefixstringoptionalPrefix for auth cookie names

Nested Shape: AdvancedAuthConfig.crossSubDomainCookies

PropertyTypeRequiredDescription
enabledbooleanEnable cross-subdomain cookies
additionalCookiesstring[]optionalExtra cookies shared across subdomains
domainstringoptionalCookie domain override — defaults to root domain derived from baseUrl

AudienceConfig

Properties

PropertyTypeRequiredDescription
postureEnum<'invite_only' | 'email_domain' | 'open'>optional (default: "invite_only")Who may self-register into this environment: invite_only (default — operator acts only), email_domain (allowlisted email domains), or open (anyone). Any posture other than invite_only forces email verification on.
allowedEmailDomainsstring[]optionalEmail domains admitted to self-register under posture email_domain (exact, case-insensitive match; subdomains need their own entries). Required non-empty for email_domain; refused under other postures.
selfRegistrationPermissionSetstringoptionalsys_permission_set name granted to each self-registrant. Required when posture is email_domain or open; refused for invite_only. admin_full_access is refused.

AuthConfig

Properties

PropertyTypeRequiredDescription
secretstringoptionalEncryption secret
baseUrlstringoptionalBase URL for auth routes
uiBasePathstringoptional (default: "/_console")Basename where the auth UI (Console) is mounted (default /_console)
databaseUrlstringoptionalDatabase connection string
providers{ id: string; clientId: string; clientSecret: string; scope?: string[] }[]optional
plugins{ organization: boolean; twoFactor: boolean; passkeys: boolean; passwordRejectBreached: boolean; … }optional
session{ expiresIn: number; updateAge: number }optional
trustedOriginsstring[]optionalTrusted origins for CSRF protection. Supports wildcards (e.g. "https://*.example.com"). The baseUrl origin is always trusted implicitly.
socialProvidersRecord<string, { clientId: string; clientSecret: string; enabled: boolean; scope?: string[] } & Record<string, any>>optionalSocial/OAuth provider map forwarded to better-auth socialProviders. Keys are provider ids (google, github, apple, …).
oidcProviders{ providerId: string; name?: string; discoveryUrl?: string; issuer?: string; … }[]optionalList of OIDC/OAuth2 providers for enterprise SSO. Product or enterprise packages can pass this directly or contribute it through auth:configure.
emailAndPassword{ enabled: boolean; disableSignUp?: boolean; requireEmailVerification?: boolean; minPasswordLength?: number; … }optionalEmail and password authentication options forwarded to better-auth
emailVerification{ sendOnSignUp?: boolean; sendOnSignIn?: boolean; autoSignInAfterVerification?: boolean; expiresIn?: number }optionalEmail verification options forwarded to better-auth
audience{ posture: Enum<'invite_only' | 'email_domain' | 'open'>; allowedEmailDomains?: string[]; selfRegistrationPermissionSet?: string }optionalAudience posture: who may self-register into this environment (invite_only — the default — | email_domain | open). See AudienceConfigSchema.
advanced{ crossSubDomainCookies?: object; useSecureCookies?: boolean; disableCSRFCheck?: boolean; cookiePrefix?: string }optionalAdvanced / low-level Better-Auth options
ssoOnlyModebooleanoptionalSSO-only login: hide the local password form + self-registration (the break-glass password endpoint stays enabled)
mutualTls{ enabled: boolean; clientCertRequired: boolean; trustedCAs: string[]; crlUrl?: string; … }optionalMutual TLS (mTLS) configuration

Nested Shape: AuthConfig.providers[number]

PropertyTypeRequiredDescription
idstringProvider ID (github, google)
clientIdstringOAuth Client ID
clientSecretstringOAuth Client Secret
scopestring[]optionalRequested permissions

Nested Shape: AuthConfig.plugins

PropertyTypeRequiredDescription
organizationbooleanoptional (default: true)Enable Organization/Teams support (frontend AuthProvider expects this enabled)
twoFactorbooleanoptional (default: false)Enable 2FA
passkeysbooleanoptional (default: false)Enable Passkey support
passwordRejectBreachedbooleanoptional (default: false)Reject passwords found in the Have I Been Pwned breach corpus (enables better-auth's haveibeenpwned plugin)
magicLinkbooleanoptional (default: false)Enable Magic Link login
oidcProviderbooleanoptional (default: false)Enable the OpenID Connect provider plugin (acts as an OIDC IdP)
dynamicClientRegistrationbooleanoptionalAllow unauthenticated RFC 7591 Dynamic Client Registration (default: follows OS_MCP_SERVER_ENABLED)
deviceAuthorizationbooleanoptional (default: false)Enable RFC 8628 Device Authorization Grant (CLI / TV-style login)
adminbooleanoptional (default: false)Enable platform admin operations (ban/unban, set-password, impersonate, set-role)
phoneNumberbooleanoptional (default: false)Enable phone-number sign-in (phone + password; OTP sign-in/reset when an SMS service is configured)

Nested Shape: AuthConfig.session

PropertyTypeRequiredDescription
expiresInnumberoptional (default: 604800)Session duration in seconds
updateAgenumberoptional (default: 86400)Session update frequency

Nested Shape: AuthConfig.socialProviders[string]

PropertyTypeRequiredDescription
clientIdstringOAuth Client ID
clientSecretstringOAuth Client Secret
enabledbooleanoptional (default: true)Enable this provider (default: true)
scopestring[]optionalAdditional OAuth scopes

Nested Shape: AuthConfig.oidcProviders[number]

OIDC / Generic OAuth2 provider configuration for enterprise SSO

PropertyTypeRequiredDescription
providerIdstringUnique identifier for this provider (e.g., okta, azure-ad)
namestringoptionalDisplay name shown in the UI (defaults to providerId)
discoveryUrlstringoptionalOIDC discovery URL (.well-known/openid-configuration). When provided, authorizationUrl/tokenUrl/userInfoUrl are fetched automatically.
issuerstringoptionalExpected issuer identifier for token validation
authorizationUrlstringoptionalOAuth2 authorization endpoint (optional if discoveryUrl is set)
tokenUrlstringoptionalOAuth2 token endpoint (optional if discoveryUrl is set)
userInfoUrlstringoptionalOAuth2 userinfo endpoint (optional if discoveryUrl is set)
clientIdstringOAuth2 client ID
clientSecretstringOAuth2 client secret
scopesstring[]optionalRequested scopes (default: openid email profile)
pkcebooleanoptionalEnable PKCE (recommended for public clients)

Nested Shape: AuthConfig.emailAndPassword

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)Enable email/password auth
disableSignUpbooleanoptionalDisable new user registration via email/password
requireEmailVerificationbooleanoptionalRequire email verification before creating a session
minPasswordLengthnumberoptionalMinimum password length (default 8)
maxPasswordLengthnumberoptionalMaximum password length (default 128)
resetPasswordTokenExpiresInnumberoptionalReset-password token TTL in seconds (default 3600)
autoSignInbooleanoptionalAuto sign-in after sign-up (default true)
revokeSessionsOnPasswordResetbooleanoptionalRevoke all other sessions on password reset

Nested Shape: AuthConfig.emailVerification

PropertyTypeRequiredDescription
sendOnSignUpbooleanoptionalAutomatically send verification email after sign-up
sendOnSignInbooleanoptionalSend verification email on sign-in when not yet verified
autoSignInAfterVerificationbooleanoptionalAuto sign-in the user after email verification
expiresInnumberoptionalVerification token TTL in seconds (default 3600)

Nested Shape: AuthConfig.audience

PropertyTypeRequiredDescription
postureEnum<'invite_only' | 'email_domain' | 'open'>optional (default: "invite_only")Who may self-register into this environment: invite_only (default — operator acts only), email_domain (allowlisted email domains), or open (anyone). Any posture other than invite_only forces email verification on.
allowedEmailDomainsstring[]optionalEmail domains admitted to self-register under posture email_domain (exact, case-insensitive match; subdomains need their own entries). Required non-empty for email_domain; refused under other postures.
selfRegistrationPermissionSetstringoptionalsys_permission_set name granted to each self-registrant. Required when posture is email_domain or open; refused for invite_only. admin_full_access is refused.

Nested Shape: AuthConfig.advanced

PropertyTypeRequiredDescription
crossSubDomainCookies{ enabled: boolean; additionalCookies?: string[]; domain?: string }optionalShare auth cookies across subdomains (critical for *.example.com multi-tenant)
useSecureCookiesbooleanoptionalForce Secure flag on cookies
disableCSRFCheckbooleanoptional⚠ Disable CSRF check — security risk, use with caution
cookiePrefixstringoptionalPrefix for auth cookie names

Nested Shape: AuthConfig.mutualTls

PropertyTypeRequiredDescription
enabledbooleanoptional (default: false)Enable mutual TLS authentication
clientCertRequiredbooleanoptional (default: false)Require client certificates for all connections
trustedCAsstring[]PEM-encoded CA certificates or file paths
crlUrlstringoptionalCertificate Revocation List (CRL) URL
ocspUrlstringoptionalOnline Certificate Status Protocol (OCSP) URL
certificateValidationEnum<'strict' | 'relaxed' | 'none'>Certificate validation strictness level
allowedCNsstring[]optionalAllowed Common Names (CN) on client certificates
allowedOUsstring[]optionalAllowed Organizational Units (OU) on client certificates
pinning{ enabled: boolean; pins: string[] }optionalCertificate pinning configuration

AuthPluginConfig

Properties

PropertyTypeRequiredDescription
organizationbooleanoptional (default: true)Enable Organization/Teams support (frontend AuthProvider expects this enabled)
twoFactorbooleanoptional (default: false)Enable 2FA
passkeysbooleanoptional (default: false)Enable Passkey support
passwordRejectBreachedbooleanoptional (default: false)Reject passwords found in the Have I Been Pwned breach corpus (enables better-auth's haveibeenpwned plugin)
magicLinkbooleanoptional (default: false)Enable Magic Link login
oidcProviderbooleanoptional (default: false)Enable the OpenID Connect provider plugin (acts as an OIDC IdP)
dynamicClientRegistrationbooleanoptionalAllow unauthenticated RFC 7591 Dynamic Client Registration (default: follows OS_MCP_SERVER_ENABLED)
deviceAuthorizationbooleanoptional (default: false)Enable RFC 8628 Device Authorization Grant (CLI / TV-style login)
adminbooleanoptional (default: false)Enable platform admin operations (ban/unban, set-password, impersonate, set-role)
phoneNumberbooleanoptional (default: false)Enable phone-number sign-in (phone + password; OTP sign-in/reset when an SMS service is configured)

AuthProviderConfig

Properties

PropertyTypeRequiredDescription
idstringProvider ID (github, google)
clientIdstringOAuth Client ID
clientSecretstringOAuth Client Secret
scopestring[]optionalRequested permissions

EmailAndPasswordConfig

Email and password authentication options forwarded to better-auth

Properties

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)Enable email/password auth
disableSignUpbooleanoptionalDisable new user registration via email/password
requireEmailVerificationbooleanoptionalRequire email verification before creating a session
minPasswordLengthnumberoptionalMinimum password length (default 8)
maxPasswordLengthnumberoptionalMaximum password length (default 128)
resetPasswordTokenExpiresInnumberoptionalReset-password token TTL in seconds (default 3600)
autoSignInbooleanoptionalAuto sign-in after sign-up (default true)
revokeSessionsOnPasswordResetbooleanoptionalRevoke all other sessions on password reset

EmailVerificationConfig

Email verification options forwarded to better-auth

Properties

PropertyTypeRequiredDescription
sendOnSignUpbooleanoptionalAutomatically send verification email after sign-up
sendOnSignInbooleanoptionalSend verification email on sign-in when not yet verified
autoSignInAfterVerificationbooleanoptionalAuto sign-in the user after email verification
expiresInnumberoptionalVerification token TTL in seconds (default 3600)

MutualTLSConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanoptional (default: false)Enable mutual TLS authentication
clientCertRequiredbooleanoptional (default: false)Require client certificates for all connections
trustedCAsstring[]PEM-encoded CA certificates or file paths
crlUrlstringoptionalCertificate Revocation List (CRL) URL
ocspUrlstringoptionalOnline Certificate Status Protocol (OCSP) URL
certificateValidationEnum<'strict' | 'relaxed' | 'none'>Certificate validation strictness level
allowedCNsstring[]optionalAllowed Common Names (CN) on client certificates
allowedOUsstring[]optionalAllowed Organizational Units (OU) on client certificates
pinning{ enabled: boolean; pins: string[] }optionalCertificate pinning configuration

Nested Shape: MutualTLSConfig.pinning

PropertyTypeRequiredDescription
enabledbooleanEnable certificate pinning
pinsstring[]Pinned certificate hashes

OidcProviderConfig

OIDC / Generic OAuth2 provider configuration for enterprise SSO

Properties

PropertyTypeRequiredDescription
providerIdstringUnique identifier for this provider (e.g., okta, azure-ad)
namestringoptionalDisplay name shown in the UI (defaults to providerId)
discoveryUrlstringoptionalOIDC discovery URL (.well-known/openid-configuration). When provided, authorizationUrl/tokenUrl/userInfoUrl are fetched automatically.
issuerstringoptionalExpected issuer identifier for token validation
authorizationUrlstringoptionalOAuth2 authorization endpoint (optional if discoveryUrl is set)
tokenUrlstringoptionalOAuth2 token endpoint (optional if discoveryUrl is set)
userInfoUrlstringoptionalOAuth2 userinfo endpoint (optional if discoveryUrl is set)
clientIdstringOAuth2 client ID
clientSecretstringOAuth2 client secret
scopesstring[]optionalRequested scopes (default: openid email profile)
pkcebooleanoptionalEnable PKCE (recommended for public clients)

OidcProvidersConfig

List of OIDC/OAuth2 providers for enterprise SSO. Product or enterprise packages can pass this directly or contribute it through auth:configure.

Type: { providerId: string; name?: string; discoveryUrl?: string; issuer?: string; … }[]


SocialProviderConfig

Social/OAuth provider map forwarded to better-auth socialProviders. Keys are provider ids (google, github, apple, …).

Type: Record<string, { clientId: string; clientSecret: string; enabled: boolean; scope?: string[] } & Record<string, any>>


On this page