Auth0 + Google Workspace : SSO pour les équipes utilisant Google

Configurer le SSO avec Google Workspace dans Auth0, accéder aux groupes Google, et implémenter l'authentification pour les outils internes.

Par Auth0.Expert · 2025-04-22 · 8 min de lecture

Google Workspace SSO Google

Auth0 + Google Workspace : SSO complet

TL;DR

Google Workspace est omniprésent dans les startups et scale-ups. Ce guide configure Auth0 pour accepter uniquement les comptes d'un domaine Google spécifique et accéder aux groupes Google.

---

Connexion Google avec restriction domaine

Ce bloc configure la connexion Google OAuth2 dans Auth0 pour n'accepter que les emails du domaine de l'entreprise.

// Auth0 Google Connection : restriction au domaine @yourcompany.com
{
  "strategy": "google-oauth2",
  "options": {
    "client_id": "YOUR_GOOGLE_CLIENT_ID",
    "client_secret": "YOUR_GOOGLE_CLIENT_SECRET",
    "scope": "email profile",
    "allowed_audiences": [],
    "hd": "yourcompany.com"  // Paramètre hd = hosted domain
  }
}

⚠️ Le paramètre hd n'est qu'un hint pour Google. Validez toujours le domaine dans une Action :

Cette action Auth0 valide côté serveur que l'adresse email appartient bien au domaine autorisé avant de laisser l'utilisateur se connecter.

exports.onExecutePostLogin = async (event, api) => {
  if (event.connection.strategy !== 'google-oauth2') return;

  const email = event.user.email;
  const allowedDomain = event.secrets.ALLOWED_DOMAIN; // 'yourcompany.com'

  if (!email.endsWith(`@${allowedDomain}`)) {
    api.access.deny(`Seuls les comptes @${allowedDomain} sont autorisés`);
  }
};

---

Récupérer les groupes Google Workspace

Ici, nous montrons comment enrichir le jeton Auth0 avec les groupes Google Workspace de l'utilisateur via une action Post Login.

// Action Post Login : récupérer les groupes Google
exports.onExecutePostLogin = async (event, api) => {
  if (event.connection.strategy !== 'google-oauth2') return;

  const accessToken = event.identity?.access_token;
  if (!accessToken) return;

  // Appeler Google Directory API
  const groupsRes = await fetch(
    `https://admin.googleapis.com/admin/directory/v1/groups?userKey=${event.user.email}`,
    {
      headers: { Authorization: `Bearer ${accessToken}` }
    }
  );

  // Requiert scope: https://www.googleapis.com/auth/admin.directory.group.readonly
  // Et que l'utilisateur soit admin ou ait la délégation de domaine

  if (!groupsRes.ok) return;

  const { groups = [] } = await groupsRes.json();
  const groupNames = groups.map(g => g.name);

  api.accessToken.setCustomClaim('https://yourapp.com/google_groups', groupNames);

  // Mapper les groupes Google → rôles Auth0
  const isAdmin = groupNames.includes('IT Admins');
  if (isAdmin) {
    api.accessToken.setCustomClaim('https://yourapp.com/role', 'admin');
  }
};

Ce code récupère les groupes du compte Google de l'utilisateur et les ajoute sous forme de claims personnalisés dans le jeton Auth0.

---

Service Account pour la délégation de domaine

Pour accéder aux groupes de tous les utilisateurs, il faut un compte de service Google avec délégation de domaine, utilisé côté backend.

# Backend : utiliser un Service Account avec délégation
from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/admin.directory.group.readonly']
SERVICE_ACCOUNT_FILE = 'service-account.json'

def get_user_groups(user_email: str) -> list:
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE,
        scopes=SCOPES,
    )
    # Délégation : agir en tant que l'admin
    delegated = credentials.with_subject('[email protected]')
    service = build('admin', 'directory_v1', credentials=delegated)

    result = service.groups().list(userKey=user_email).execute()
    return [g['name'] for g in result.get('groups', [])]

Ce script Python permet au backend de consulter les groupes pour n'importe quel utilisateur grâce à la délégation via Service Account.

---

Provisioning automatique avec Google Workspace

Cette action permet de déclencher la création automatique d'un utilisateur Google Workspace dès son inscription Auth0.

// Action: Post User Registration
// Créer un utilisateur dans Google Workspace quand il s'inscrit
exports.onExecutePostUserRegistration = async (event, api) => {
  if (!event.user.email.endsWith('@yourcompany.com')) return;

  // Appeler votre backend qui crée le compte Google
  await fetch(`${event.secrets.BACKEND_URL}/api/provision/google-user`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Internal-Token': event.secrets.INTERNAL_TOKEN,
    },
    body: JSON.stringify({
      email: event.user.email,
      first_name: event.user.given_name,
      last_name: event.user.family_name,
      auth0_id: event.user.user_id,
    }),
  });
};

Ce mécanisme automatise le provisioning des comptes Google Workspace dès qu'un nouvel utilisateur est créé dans Auth0.

---

Lock sur le domaine : empêcher les comptes personnels

Voici un exemple d'action qui bloque les connexions depuis les services d'email public non professionnels (B2B only).

// Action complète anti-gmail.com/yahoo.com pour apps B2B
const BLOCKED_FREE_EMAIL_DOMAINS = [
  'gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com',
  'icloud.com', 'protonmail.com', 'live.com',
];

exports.onExecutePostLogin = async (event, api) => {
  const emailDomain = event.user.email?.split('@')[1]?.toLowerCase();

  if (BLOCKED_FREE_EMAIL_DOMAINS.includes(emailDomain)) {
    api.access.deny(
      'Veuillez vous connecter avec votre email professionnel. ' +
      'Les adresses personnelles ne sont pas autorisées.'
    );
  }
};

Cette action interdit l’accès aux utilisateurs qui essaient de se connecter avec une adresse email personnelle.

---

Google Cloud Identity : extension de Google Workspace

Dans ce cas d'usage, on étend la connexion Google OAuth2 pour inclure les clients utilisant Google Cloud Identity (hors Gmail).

{
  "strategy": "google-oauth2",
  "options": {
    "hd": "yourcompany.com",
    "scope": "email profile https://www.googleapis.com/auth/cloud-identity.groups.readonly"
  }
}

---

> 🔵 Intégration Google Workspace : nous configurons votre SSO Google Workspace avec Auth0, provisioning automatique et synchronisation des groupes en 1 journée.

📞 +33 1 23 45 67 89 · 📧 [email protected]


Autres articles