Gestion des secrets Auth0 : vault, rotation et bonnes pratiques DevSecOps
Client secrets, clés API, secrets d'Actions — comment les stocker, les faire pivoter et éviter les fuites dans votre code source.
Par Auth0.Expert · 2025-04-01 · 9 min de lecture
Gestion des secrets Auth0 : guide DevSecOps
TL;DR
Un client secret exposé dans un dépôt Git = compromission totale de votre identité Auth0. Ce guide couvre le stockage sécurisé, la rotation et la détection de fuites.
---
Les 3 types de secrets Auth0
Ce tableau compare la sensibilité et la politique de rotation recommandée pour chaque type de secret utilisé avec Auth0.
| Secret | Sensibilité | Rotation | |--------|-------------|---------| | Client Secret (M2M) | ⭐⭐⭐⭐⭐ | Trimestrielle | | Management API Token | ⭐⭐⭐⭐⭐ | Automatique (1h) | | Action Secrets | ⭐⭐⭐⭐ | Selon usage | | Client ID | ⭐ (semi-public) | Rare |
---
Ne jamais faire
Voici des exemples de mauvaises pratiques à éviter pour protéger les secrets Auth0, comme les laisser dans le code, les fichiers .env committés, ou les logs.
// ❌ Secret dans le code source
const auth0 = new ManagementClient({
clientSecret: 'THIS_IS_SECRET_NEVER_DO_THIS',
});
// ❌ Secret dans .env commité
// .env
AUTH0_CLIENT_SECRET=abc123secret
// ❌ Secret dans les logs
console.log(`Using secret: ${process.env.AUTH0_CLIENT_SECRET}`);
---
Stocker les secrets : options par environnement
Définir le bon mode de stockage des secrets dépend de l'environnement : local, cloud, CI/CD, orchestrateurs de conteneurs.
Local development : .env + .gitignore
Ce code montre comment configurer les fichiers de secrets pour le développement local, tout en s’assurant qu’ils ne sont pas versionnés dans Git.
# .gitignore
.env
.env.local
.env.*.local
*.secret
# .env (jamais commité)
AUTH0_CLIENT_SECRET=dev_secret_here
Production : AWS Secrets Manager
Utilisez AWS Secrets Manager pour stocker et récupérer de façon sécurisée les secrets dans un environnement de production. Ici, un cache permet de limiter les accès et d'améliorer la performance.
import boto3
import json
from functools import lru_cache
@lru_cache(maxsize=1)
def get_auth0_secrets():
client = boto3.client('secretsmanager', region_name='eu-west-1')
response = client.get_secret_value(SecretId='prod/auth0/m2m')
return json.loads(response['SecretString'])
# Usage
secrets = get_auth0_secrets()
auth0_secret = secrets['client_secret']
Ce bloc charge le secret Auth0 depuis AWS Secrets Manager et le met en cache côté application.
GitHub Actions : GitHub Secrets
Ce fragment explique comment injecter vos secrets Auth0 en toute sécurité dans les workflows CI/CD GitHub Actions via l’infrastructure de secrets intégrée.
env:
AUTH0_CLIENT_SECRET: ${{ secrets.AUTH0_CLIENT_SECRET }}
AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
Kubernetes : External Secrets Operator
Dans un cluster Kubernetes, External Secrets Operator permet de synchroniser des secrets depuis des vaults externes (ex : HashiCorp Vault, AWS Secrets Manager) directement dans Kubernetes.
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: auth0-secrets
spec:
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: auth0-secrets
creationPolicy: Owner
data:
- secretKey: AUTH0_CLIENT_SECRET
remoteRef:
key: secret/auth0/m2m
property: client_secret
---
Action Secrets : secrets dans les Actions Auth0
Ce code démontre comment accéder à des secrets configurés dans le dashboard Auth0 directement dans vos Actions pour intégrer des notifications ou services externes.
// Dans votre Action Auth0
exports.onExecutePostLogin = async (event, api) => {
// Accéder aux secrets configurés dans le dashboard
const slackWebhook = event.secrets.SLACK_WEBHOOK_URL;
const crmApiKey = event.secrets.CRM_API_KEY;
await fetch(slackWebhook, {
method: 'POST',
body: JSON.stringify({ text: `Nouveau login: ${event.user.email}` }),
});
};
Cette Action Auth0 envoie une notification à Slack à chaque login grâce à un secret sécurisé.
Configuration : Dashboard → Actions → votre Action → Secrets → Add Secret
---
Rotation des secrets M2M
Voici un exemple de processus automatisé pour faire tourner un secret client M2M Auth0, mettre à jour AWS Secrets Manager, puis déclencher un redéploiement de vos services dépendants.
import httpx
import os
import json
import boto3
async def rotate_auth0_secret(client_id: str, domain: str, mgmt_token: str):
"""Rotation du secret avec mise à jour AWS Secrets Manager."""
# 1. Demander la rotation à Auth0
resp = await httpx.AsyncClient().post(
f"https://{domain}/api/v2/clients/{client_id}/rotate-secret",
headers={"Authorization": f"Bearer {mgmt_token}"},
)
new_secret = resp.json()["client_secret"]
# 2. Mettre à jour AWS Secrets Manager
sm = boto3.client('secretsmanager')
sm.update_secret(
SecretId='prod/auth0/m2m',
SecretString=json.dumps({
"client_id": client_id,
"client_secret": new_secret,
}),
)
# 3. Déclencher un redéploiement
# (via votre CI/CD)
print
Autres articles
- Auth0 et OAuth 2.0 : architecture complète pour comprendre les flux d'autorisation
- OpenID Connect sur Auth0 : ID Token, UserInfo et discovery endpoint expliqués
- Configurer SAML 2.0 avec Auth0 : guide complet pour l'entreprise
- Migrer des Rules vers les Auth0 Actions : guide pas à pas
- Architecture multi-tenant avec Auth0 : organisations, isolation et bonnes pratiques
- Validation des JWT Auth0 : RS256 vs HS256, JWKS et pièges communs
- Concevoir son architecture de tenants Auth0 : dev, staging, prod
- Configurer un domaine personnalisé Auth0 : login.votredomaine.com étape par étape