Connexions sociales Auth0 : Google, GitHub, LinkedIn — configuration et pièges

Configurer Google, GitHub, Apple, LinkedIn et Facebook comme connexions sociales dans Auth0. Scopes, consentement, account linking et gestion des refresh tokens sociaux.

Par Auth0.Expert · 2025-04-01 · 10 min de lecture

Social Login Google OAuth2

Connexions sociales Auth0 : guide complet

TL;DR

Auth0 supporte 50+ fournisseurs sociaux (Google, GitHub, Apple, LinkedIn...). Ce guide couvre la configuration, les scopes nécessaires, le traitement des refresh tokens et l'account linking.

---

Google OAuth2

Cette section présente les étapes pour connecter Google comme fournisseur OAuth2 dans Auth0.

Configuration dans Auth0

Ce bloc JSON représente la configuration requise à entrer dans Auth0 pour connecter Google, incluant les identifiants client et les scopes d'autorisation.

{
  "client_id": "YOUR_GOOGLE_CLIENT_ID.apps.googleusercontent.com",
  "client_secret": "YOUR_GOOGLE_CLIENT_SECRET",
  "scope": "email profile",
  "allowed_audiences": []
}

Créer les credentials Google

Voici les étapes à suivre dans la Google Cloud Console pour générer vos identifiants OAuth2 nécessaires à Auth0.

  1. Google Cloud Console → APIs & Services → Credentials
  2. Create OAuth 2.0 Client ID
  3. Type: Web application
  4. Authorized redirect URIs: https://YOUR_DOMAIN.auth0.com/login/callback

Scopes Google étendus

Ce bloc montre comment ajouter des scopes Google supplémentaires pour demander des accès à Google Calendar, Drive, etc.

// Pour accès à Google Calendar, Drive, etc.
{
  "scope": "email profile https://www.googleapis.com/auth/calendar.readonly"
}

⚠️ Les scopes étendus nécessitent une vérification Google (OAuth Consent Screen → Production).

---

GitHub OAuth2

Voici comment configurer l'authentification via GitHub dans Auth0. Les scopes définissent les droits d'accès demandés.

{
  "client_id": "YOUR_GITHUB_CLIENT_ID",
  "client_secret": "YOUR_GITHUB_CLIENT_SECRET",
  "scope": "user:email read:user"
}

GitHub ne retourne pas toujours l’email d’un utilisateur, surtout si l'email est privé. Ce code permet de le récupérer via l’API GitHub lors du post-login.

// Action Post Login pour GitHub
exports.onExecutePostLogin = async (event, api) => {
  if (event.connection.strategy !== 'github') return;

  if (!event.user.email) {
    // Appeler l'API GitHub pour récupérer l'email privé
    const token = event.secrets.GITHUB_ACCESS_TOKEN;
    const res = await fetch('https://api.github.com/user/emails', {
      headers: { Authorization: `token ${event.identity?.access_token}` }
    });
    const emails = await res.json();
    const primary = emails.find(e => e.primary)?.email;
    if (primary) {
      api.user.setUserMetadata('github_email', primary);
    }
  }
};

Ce script effectue un appel API pour compléter automatiquement les emails manquants dans Auth0 lors de la connexion GitHub.

---

Apple Sign In

Dans cette partie, découvrez la configuration Apple, qui demande des spécificités de sécurité et un stockage immédiat des informations.

{
  "client_id": "com.yourapp.service",  // Service ID Apple, pas le Bundle ID
  "team_id": "TEAMID10PL",
  "key_id": "AUTHKEY001",
  "private_key": "-----BEGIN PRIVATE KEY-----
...",
  "scope": "name email"
}

Apple ne fournit le nom et l’email de l'utilisateur qu’à la toute première connexion. Il est donc essentiel de capturer ces données dans user_metadata dès le départ.

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

  const { given_name, family_name } = event.user;
  if (given_name && !event.user.user_metadata?.name_stored) {
    api.user.setUserMetadata('given_name', given_name);
    api.user.setUserMetadata('family_name', family_name);
    api.user.setUserMetadata('name_stored', true);
  }
};

Ce code garantit que les données prénom et nom issues d’Apple sont bien sauvegardées dans Auth0 au moment de la première connexion.

---

Account Linking : fusionner les identités

Voici comment automatiser la détection et la fusion de deux comptes utilisateur utilisant la même adresse email sur des providers différents.

// Action Post Login : détecter et lier les comptes avec le même email
exports.onExecutePostLogin = async (event, api) => {
  if (event.stats.logins_count > 1) return; // Déjà connecté avant

  const ManagementClient = require('auth0').ManagementClient;
  const mgmt = new ManagementClient({
    domain: event.secrets.AUTH0_DOMAIN,
    clientId: event.secrets.AUTH0_CLIENT_ID,
    clientSecret: event.secrets.AUTH0_CLIENT_SECRET,
  });

  const users = await mgmt.getUsersByEmail(event.user.email);
  if (users.length > 1) {
    // Lier l'identité actuelle à l'utilisateur principal
    const primaryUser = users.find(u => u.user_id !== event.user.user_id);
    await mgmt.linkUsers(primaryUser.user_id, {
      user_id: event.user.user_id.split('|')[1],
      provider: event.user.user_id.split('|')[0],
    });
    api.authentication.setPrimaryUser(primaryUser.user_id);
  }
};

Ce script relie automatiquement plusieurs comptes Auth0 ayant le même email, permettant une expérience utilisateur unifiée.

---

Tableau des fournisseurs sociaux

Voici un récapitulatif des principaux fournisseurs sociaux, des scopes minimaux, de la gestion des emails et du support refresh token.

| Fournisseur | Scopes min | Email garanti | Refresh Token | |-------------|-----------|---------------|---------------| | Google | email, profile | ✅ | Offline access | | GitHub | user:email | ⚠️ Si email public | ❌ | | Apple | email | ✅ (1ère fois) | ❌ | | LinkedIn | openid, email | ✅ | ❌ | | Facebook | email | ✅ | 60 jours | | Microsoft | openid, email | ✅ | offline_access | | Twitter/X | tweet.read, users.read | ❌ | ❌ |

---

> 🔐 Configuration SSO enterprise : nous configurons vos connexions sociales et entreprise avec account linking et provisioning automatique en 48h.

📧 [email protected]


Autres articles