đ ActivitĂ© Pratique : ImplĂ©mentation dâune Authentification OAuth 2.0 avec Google
Dans cette activité, nous allons mettre en place une authentification OAuth 2.0 en utilisant Google comme fournisseur d'identité (IdP). L'application permettra aux utilisateurs de se connecter avec leur compte Google.
Cette activité pratique vous guide pas à pas dans la mise en place d'une connexion OAuth 2.0 via Google : vos utilisateurs pourront s'authentifier directement avec leur compte Google au sein de l'application.
đ ïž Configuration de lâapplication Google
đ AccĂ©der Ă la Console Google Cloud :
Rendez-vous sur Google Cloud Console et connectez-vous avec votre compte Google.
đ CrĂ©er un projet :
- Cliquez sur "Créer un projet". Donnez-lui un nom, puis cliquez sur "Créer".
đ ïž Configurer lâOAuth Consent Screen (Ă©cran de consentement OAuth) :
- Allez dans "API & Services" â "Consentement OAuth".
- Choisissez type externe si vous souhaitez permettre Ă d'autres utilisateurs d'utiliser votre application.
- Remplissez les champs requis, comme le nom de l'application et votre email.
- Enregistrez.
đ CrĂ©er des identifiants OAuth 2.0 :
- Rendez-vous dans "Identifiants" â "CrĂ©er des identifiants" â "Identifiants OAuth 2.0".
- Sélectionnez Application web comme type.
- Configurez les URI de redirection (callback URL) :
Par exemple :http://localhost:3000/auth/google/callback - Cliquez sur Créer et notez votre Client ID et Client Secret.
đ Initialiser le Projet Node.js
đ CrĂ©er un projet Node.js :
mkdir oauth2-google-auth
cd oauth2-google-authnpm init -y
npm install express passport passport-google-oauth20 express-session dotenvđ ïž Configurer lâenvironnement :
Créez un fichier .env pour stocker vos identifiants OAuth :
GOOGLE_CLIENT_ID=<votre_client_id>
GOOGLE_CLIENT_SECRET=<votre_client_secret>
SESSION_SECRET=<votre_session_secret>
CALLBACK_URL=http://localhost:3000/auth/google/callbackđ Ăcrire le Code de lâApplication
Créer un fichier app.js :
const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const session = require('express-session');
require('dotenv').config();
const app = express();
// Configuration de la session
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
}));
// Initialisation de Passport
app.use(passport.initialize());
app.use(passport.session());
// Configuration de Passport avec Google OAuth
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: process.env.CALLBACK_URL,
}, (accessToken, refreshToken, profile, done) => {
// Stocker le profil utilisateur
return done(null, profile);
}));
// Sérialiser les données utilisateur dans la session
passport.serializeUser((user, done) => {
done(null, user);
});
// Désérialiser les données utilisateur depuis la session
passport.deserializeUser((user, done) => {
done(null, user);
});
// Route principale
app.get('/', (req, res) => {
res.send(`<h1>Bienvenue</h1><a href="/auth/google">Se connecter avec Google</a>`);
});
// Route pour dĂ©marrer lâauthentification avec Google
app.get('/auth/google', passport.authenticate('google', {
scope: ['profile', 'email'],
}));
// Route de callback aprĂšs l'authentification
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/' }),
(req, res) => {
res.redirect('/dashboard');
}
);
// Route protégée : tableau de bord
app.get('/dashboard', (req, res) => {
if (!req.isAuthenticated()) {
return res.redirect('/');
}
res.send(`<h1>Bonjour, ${req.user.displayName}!</h1><a href="/logout">Se déconnecter</a>`);
});
// Déconnexion
app.get('/logout', (req, res) => {
req.logout(() => {
res.redirect('/');
});
});
// Lancer le serveur
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Serveur en cours dâexĂ©cution sur http://localhost:${PORT}`);
});đ Tester lâApplication
đ Lancer le serveur :
node app.jsđ AccĂ©der Ă lâapplication :
Ouvrez votre navigateur et rendez-vous sur http://localhost:3000.
- Cliquez sur "Se connecter avec Google".
- Connectez-vous avec votre compte Google.
- Une fois authentifié, vous serez redirigé vers le tableau de bord qui affichera votre nom.
đ Explications Techniques
Passport.js :
- Un middleware dâauthentification pour Node.js.
- La stratégie
passport-google-oauth20est utilisée pour intégrer OAuth 2.0 avec Google.
Sessions avec Express :
- Les informations utilisateur sont stockĂ©es dans une session pour persister entre les requĂȘtes.
Callback URL :
- Le point dâentrĂ©e oĂč Google redirige aprĂšs lâauthentification.
- Cette URL doit ĂȘtre enregistrĂ©e dans les paramĂštres OAuth de Google.
đ Allez plus loin
- Ajouter une base de données pour stocker les utilisateurs.
- Protéger les routes avec des middlewares pour vérifier si un utilisateur est authentifié.
- Intégrer d'autres fournisseurs (GitHub, Facebook).
Cette activitĂ© pratique vous permet de comprendre le fonctionnement dâOAuth 2.0 et dâimplĂ©menter un flux dâauthentification sĂ©curisĂ© et moderne.
Vérification rapide
Quiz du chapitre
Authentification
Terminez le quiz du chapitre pour le marquer comme complété.
đ Comparaison des Cas dâUtilisation : OAuth 2.0 vs OpenID Connect
Comparaison des cas d'usage de OAuth 2.0, OpenID Connect, SAML et des fournisseurs d'identité pour choisir le bon protocole selon le contexte.
đ Principaux Risques de SĂ©curitĂ© dans l'Authentification Web
Vue d'ensemble des principales menaces d'authentification web : force brute, vol de session, XSS, CSRF et leurs contre-mesures.