TW3 — Technologies du Web 3

🔒 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".
  • 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-auth
npm 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-oauth20 est 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

2 questions
0 / 2 répondue0%
  1. 1Dans l'activité d'implémentation OAuth 2.0 avec Google, quel est le rÎle du callback URL configuré dans la Console Google Cloud ?
  2. 2Parmi les packages installés dans cette activité, lequel est spécifiquement dédié à la stratégie d'authentification Google OAuth 2.0 ?
Répondez à toutes les questions pour valider.

Authentification

Terminez le quiz du chapitre pour le marquer comme complété.

Tableau de bord

On this page