Skip to content

Configuration

The configuration section key is auth. Values are read from YAML, environment variables (QK_AUTH__*), or passed directly to AuthConfig(...).

KeyTypeDefaultEnv VarDescription
enabledboolTrueQK_AUTH__ENABLEDEnable auth module
secret_keystr(required)QK_AUTH__SECRET_KEYSecret key for signing tokens
admin_emailstrNoneQK_AUTH__ADMIN_EMAILInitial admin email
admin_passwordstrNoneQK_AUTH__ADMIN_PASSWORDInitial admin password
login_rate_limitstr"5/minute"QK_AUTH__LOGIN_RATE_LIMITRate limit for login endpoints
max_sessions_per_userintNoneQK_AUTH__MAX_SESSIONS_PER_USERMax concurrent sessions (None = unlimited)
userslist[AuthUserConfig][]—Bootstrap users
rolesdict[str, AuthRoleConfig]{}—RBAC role definitions
oauth2_providersdict[str, dict]{}—OAuth2 provider configs (client_id, client_secret, etc.)
KeyTypeDefaultEnv VarDescription
enabledboolTrueQK_AUTH__RBAC__ENABLEDEnable RBAC enforcement
superuser_bypassboolTrueQK_AUTH__RBAC__SUPERUSER_BYPASSSuperuser bypasses all checks
default_rolestr"viewer"QK_AUTH__RBAC__DEFAULT_ROLEDefault role for new users
cache_permissionsboolTrueQK_AUTH__RBAC__CACHE_PERMISSIONSCache resolved permissions
permission_cache_ttlint300QK_AUTH__RBAC__PERMISSION_CACHE_TTLPermission cache TTL (seconds)
KeyTypeDefaultEnv VarDescription
secret_keystr(required)QK_AUTH__TOKEN__SECRET_KEYJWT signing secret
algorithmstr"HS256"QK_AUTH__TOKEN__ALGORITHMSigning algorithm
access_token_expireDuration30 minutesQK_AUTH__TOKEN__ACCESS_TOKEN_EXPIREAccess token lifetime
refresh_token_expireDuration7 daysQK_AUTH__TOKEN__REFRESH_TOKEN_EXPIRERefresh token lifetime
id_token_expireDuration1 hourQK_AUTH__TOKEN__ID_TOKEN_EXPIREID token lifetime
key_rotation_grace_periodDuration300 secondsQK_AUTH__TOKEN__KEY_ROTATION_GRACE_PERIODGrace period for rotated keys
required_audiencestrNoneQK_AUTH__TOKEN__REQUIRED_AUDIENCERequired aud claim
KeyTypeDefaultEnv VarDescription
min_lengthint12QK_AUTH__PASSWORD__MIN_LENGTHMinimum password length
max_lengthint128QK_AUTH__PASSWORD__MAX_LENGTHMaximum password length
require_uppercaseboolTrueQK_AUTH__PASSWORD__REQUIRE_UPPERCASERequire uppercase letter
require_lowercaseboolFalseQK_AUTH__PASSWORD__REQUIRE_LOWERCASERequire lowercase letter
require_digitsboolTrueQK_AUTH__PASSWORD__REQUIRE_DIGITSRequire digit
require_specialboolFalseQK_AUTH__PASSWORD__REQUIRE_SPECIALRequire special character
banned_patternslist[str][]—Case-insensitive banned substrings
KeyTypeDefaultEnv VarDescription
backendstr"session"QK_AUTH__MIDDLEWARE__BACKENDAuth backend type
header_namestr"Authorization"QK_AUTH__MIDDLEWARE__HEADER_NAMEHeader for token
schemestr"Bearer"QK_AUTH__MIDDLEWARE__SCHEMEToken scheme
optional_authboolFalseQK_AUTH__MIDDLEWARE__OPTIONAL_AUTHAuth is optional
login_urlstrNoneQK_AUTH__MIDDLEWARE__LOGIN_URLLogin redirect URL
login_rate_limitstr"5/minute"QK_AUTH__MIDDLEWARE__LOGIN_RATE_LIMITRate limit
exclude_pathslist[str][]—Paths excluded from auth
exclude_prefixeslist[str][]—Path prefixes excluded
auth:
secret_key: "${QK_AUTH__SECRET_KEY}"
login_rate_limit: "10/minute"
max_sessions_per_user: 3
rbac:
enabled: true
superuser_bypass: true
default_role: "viewer"
token:
algorithm: "RS256"
access_token_expire: "15m"
refresh_token_expire: "7d"
required_audience: "my-service"
password:
min_length: 12
require_uppercase: true
require_digits: true
banned_patterns:
- "password"
- "123456"
oauth2_providers:
google:
client_id: "${GOOGLE_CLIENT_ID}"
client_secret: "${GOOGLE_CLIENT_SECRET}"
Terminal window
# Required
export QK_AUTH__SECRET_KEY="your-256-bit-secret"
export QK_AUTH__TOKEN__SECRET_KEY="your-256-bit-secret"
# RBAC
export QK_AUTH__RBAC__ENABLED=true
export QK_AUTH__RBAC__DEFAULT_ROLE="admin"
# JWT
export QK_AUTH__TOKEN__ALGORITHM="RS256"
export QK_AUTH__TOKEN__ACCESS_TOKEN_EXPIRE="30m"
# Password policy
export QK_AUTH__PASSWORD__MIN_LENGTH=12
export QK_AUTH__PASSWORD__REQUIRE_UPPERCASE=true
# Middleware
export QK_AUTH__MIDDLEWARE__OPTIONAL_AUTH=false