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
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
- 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