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

Secrets DevSecOps Vault

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