Obexal Docs

Docs/Auto-hébergement/Configuration

Référence de configuration

Les principales variables d'environnement de l'auth-service, famille par famille : base de données, chiffrement, sessions, e-mail, politiques de connexion, stockage et observabilité.

L'auth-service suit le modèle 12-factor : toute la configuration provient de variables d'environnement, chargées et validées au démarrage. Cette page liste les variables principales par famille, avec leurs défauts exacts.

Comment la configuration est chargée

Une valeur requise absente ou invalide arrête le service au démarrage avec une erreur explicite, jamais un repli silencieux. Les durées utilisent la syntaxe Go (30m, 24h, 720h) ; les booléens acceptent true et false. Deux garde-fous de production s'appliquent : avec APP_ENV=production, SESSION_SECURE doit valoir true et MAIL_TRANSPORT=log est refusé. SESSION_SECURE=true est aussi exigé dès que OIDC_ISSUER est en HTTPS.

Service de base

VariableRôleDéfaut
APP_ENVdevelopment ou production ; la production active des garde-fous strictsdevelopment
HTTP_ADDRAdresse d'écoute de l'API:8080
LOG_LEVELNiveau des logs structurés JSONinfo
OIDC_ISSUERURL publique de l'API : le claim iss et la base des URLs de découvertehttp://localhost:8080
LOGIN_UI_URLURL publique de l'interface de connexion (les liens magiques pointent dessus)http://localhost:3000
ALLOWED_DATA_REGIONSRégions de résidence des données autorisées pour les tenants (CSV)eu

Base de données et Redis

VariableRôleDéfaut
DATABASE_URLChaîne de connexion PostgreSQL ; porte tout l'état durablerequise
REDIS_URLChaîne de connexion Redis ; sessions et rate limiting, volatilerequise

Sur des services managés, utilisez sslmode=verify-full pour PostgreSQL et rediss:// pour Redis : TLS de bout en bout.

Chiffrement au repos

VariableRôleDéfaut
ENCRYPTION_KEYClé primaire AES-256-GCM : chiffre les secrets TOTP et les clés privées de signature OIDC stockées en base (base64, exactement 32 octets)requise
ENCRYPTION_KEY_OLDClés précédentes (CSV), conservées en déchiffrement seul pendant une rotation de clévide

Générer une clé :

openssl rand -base64 32
Danger

Conservez ENCRYPTION_KEY dans un coffre à secrets, séparément des sauvegardes de base. Un dump restauré est illisible sans la clé qui a chiffré ses secrets.

Sessions, cookies et proxys

VariableRôleDéfaut
SESSION_TTLDurée de vie des sessions24h
SESSION_SECUREMarque les cookies Secure ; obligatoire en productionfalse
SESSION_COOKIE_NAMENom du cookie de sessionobexal_session
SESSION_COOKIE_DOMAINDomaine du cookie, si partagé entre sous-domainesvide
COOKIE_SAMESITElax, strict ou nonelax
CSRF_COOKIE_NAMENom du cookie CSRFobexal_csrf
ALLOWED_ORIGINSOrigines CORS autorisées à appeler l'API (CSV)vide
TRUSTED_PROXIESPlages CIDR des reverse proxys dont le X-Forwarded-For est honorévide
Attention

Laissez TRUSTED_PROXIES vide et le service ne fait confiance qu'à l'adresse TCP de la connexion : derrière un proxy, tous les clients s'effondrent sur l'IP du proxy et le rate limiting par IP cesse de fonctionner.

Durées de vie des jetons

VariableRôleDéfaut
OAUTH_ACCESS_TOKEN_TTLDurée de vie de l'access token10m
OAUTH_ID_TOKEN_TTLDurée de vie de l'ID token10m
OAUTH_REFRESH_TOKEN_TTLDurée de vie du refresh token720h
OAUTH_AUTH_CODE_TTLDurée de vie du code d'autorisation1m

Ces durées bornent aussi la période de grâce d'une rotation de clé de signature.

Envoi d'e-mails

VariableRôleDéfaut
MAIL_TRANSPORTsmtp ou log (débogage : écrit les e-mails dans les logs, refusé en production)log
SMTP_HOSTHôte du relais SMTP (choisissez un relais UE)vide
SMTP_PORTPort SMTP587
SMTP_USERNAMEUtilisateur SMTPvide
SMTP_PASSWORDMot de passe SMTPvide
MAIL_FROMAdresse d'expéditeurno-reply@obexal.local

Politiques de connexion et de compte

VariableRôleDéfaut
REQUIRE_EMAIL_VERIFICATIONBloque la connexion par mot de passe des adresses non vérifiéesfalse
EMAIL_OTPExige un code e-mail comme second facteur à la connexion par mot de passe quand l'utilisateur n'a pas de TOTPtrue
MFA_ENROLLMENT_STRICTQuand un tenant exige la MFA, rejette les requêtes authentifiées (403) tant qu'aucun facteur n'est enrôléfalse
ORG_SIGNUP_ENABLEDAutorise la création d'organisation en self-servicetrue
ACCOUNT_SELF_DELETE_ENABLEDPermet à l'utilisateur final de supprimer lui-même son compte (tenants grand public seulement)false
ACCOUNT_SELF_EMAIL_CHANGE_ENABLEDPermet à l'utilisateur final de changer lui-même son adresse e-mail (tenants grand public seulement)false

Rate limiting et verrouillage

VariableRôleDéfaut
RATE_LIMIT_LOGIN_MAXTentatives de connexion par compte et par fenêtre10
RATE_LIMIT_LOGIN_WINDOWFenêtre du rate limit de connexion15m
RATE_LIMIT_LOGIN_IP_MAXTentatives de connexion par IP et par fenêtre100
RATE_LIMIT_SIGNUP_MAXInscriptions par identifiant et par fenêtre5
RATE_LIMIT_SIGNUP_WINDOWFenêtre du rate limit d'inscription1h
RATE_LIMIT_SIGNUP_IP_MAXInscriptions par IP et par fenêtre50
LOGIN_LOCKOUT_MAXÉchecs avant verrouillage d'un compte (0 ou moins désactive)10
LOGIN_LOCKOUT_WINDOWFenêtre de comptage des échecs15m
LOGIN_LOCKOUT_DURATIONDurée du verrou15m

Fichiers de données locaux

Deux fonctions optionnelles lisent des fichiers locaux, sans appel réseau et sans qu'aucune donnée ne quitte votre périmètre :

VariableRôleDéfaut
GEOIP_DB_PATHChemin d'une base GeoIP .mmdb pour les règles par pays de l'accès conditionnelvide
BREACHED_PASSWORD_FILEChemin d'un corpus de mots de passe compromis, format HIBP SHA1:count ou texte brutvide

Les deux sont fail-open : si le fichier est absent ou illisible, la fonction reste inerte et rien n'est bloqué. Rafraîchissez périodiquement le fichier GeoIP (il est chargé au démarrage).

Stockage objet (logos de tenant)

VariableRôleDéfaut
S3_ENDPOINTEndpoint compatible S3, hôte:port sans schémavide
S3_ACCESS_KEYClé d'accèsvide
S3_SECRET_KEYClé secrètevide
S3_BUCKETBucket des éléments de marque des tenantsobexal-branding
S3_USE_SSLTLS vers l'endpointfalse
S3_REGIONÉtiquette de région du protocole S3us-east-1

L'upload de logo est proprement désactivé tant que l'endpoint, la clé d'accès et la clé secrète ne sont pas tous les trois renseignés. L'étiquette de région par défaut n'est qu'une convention du protocole S3 utilisée par MinIO : aucun service américain n'est impliqué.

Webhooks et audit

VariableRôleDéfaut
WEBHOOK_WORKERSTaille du pool de livraison4
WEBHOOK_QUEUE_SIZECapacité de la file de livraison256
WEBHOOK_TIMEOUTTimeout de chaque tentative de livraison10s
WEBHOOK_ALLOW_PRIVATE_TARGETSAutorise des URLs de webhook vers des adresses privées ou de bouclagefalse
AUDIT_RETENTIONRétention du journal d'audit ; 0 désactive la purge0
Danger

WEBHOOK_ALLOW_PRIVATE_TARGETS=true est réservé au développement. En production, il ouvre la porte au SSRF : un admin de tenant pourrait viser votre réseau interne. Laissez false.

Agents IA

VariableRôleDéfaut
AGENT_AUTO_CONTAINMENT_ENABLEDConfine automatiquement un agent IA dont l'activité explose très au-delà de sa baseline (applique le kill switch)true

Observabilité

VariableRôleDéfaut
METRICS_ENABLEDExpose GET /metrics au format Prometheustrue
METRICS_TOKENSi définie, exige Authorization: Bearer sur /metricsvide
HTTP_REQUEST_TIMEOUTTimeout de traitement par requête (503 au-delà) ; 0 désactive15s

Variables consommées par d'autres composants

Celles-ci ne sont pas lues par l'auth-service :

  • OBEXAL_CONNECT_SRC : la directive CSP connect-src des interfaces de connexion et d'administration. Resserrez-la sur l'origine exacte de l'API en production.
  • NEXT_PUBLIC_OBEXAL_API_URL, NEXT_PUBLIC_LOGIN_UI_URL, NEXT_PUBLIC_ADMIN_URL, NEXT_PUBLIC_ALLOWED_REDIRECTS : arguments de build intégrés aux images des interfaces.
  • OBEXAL_ACME_EMAIL, OBEXAL_API_HOST, OBEXAL_ADMIN_HOST, OBEXAL_LOGIN_HOST : consommées par l'overlay TLS Caddy (voir Déployer avec Docker Compose).