Client OAuth pour Node.js : implémentation de l'authentification via Google et GitHub

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client OAuth pour JavaScript (Node.js) : guide complet

\n\n

OAuth (Open Authorization) est un protocole ouvert qui permet d'accorder à une application tierce un accès limité aux ressources d'un utilisateur sans lui transmettre son identifiant et son mot de passe. Dans le monde Node.js, l'implémentation d'un client OAuth est l'une des tâches les plus courantes lors de la création d'applications web modernes. Dans cet article, nous allons détailler comment écrire votre propre client OAuth pour l'authentification via Google et GitHub, en utilisant la bibliothèque populaire Passport.js.

\n\n

Qu'est-ce qu'OAuth 2.0 et pourquoi en a-t-on besoin ?

\n

OAuth 2.0 est une norme utilisée pour la délégation d'accès. Au lieu de stocker les mots de passe des utilisateurs sur votre serveur, vous les redirigez vers la page du fournisseur (Google, GitHub, Facebook), où ils donnent leur consentement. Ensuite, votre application reçoit un jeton d'accès (access token), avec lequel elle peut accéder à l'API du fournisseur au nom de l'utilisateur.

\n\n

Principaux avantages :

\n
    \n
  • Sécurité — les mots de passe ne sont pas stockés sur votre serveur.
  • \n
  • Commodité pour l'utilisateur — pas besoin de s'inscrire à nouveau.
  • \n
  • Flexibilité — vous pouvez demander uniquement les données réellement nécessaires (scope).
  • \n
\n\n

Installation des paquets nécessaires

\n

Pour travailler avec OAuth dans Node.js, nous utiliserons les bibliothèques suivantes :

\n
    \n
  • express — framework web
  • \n
  • passport — middleware d'authentification
  • \n
  • passport-google-oauth20 — stratégie pour Google
  • \n
  • passport-github2 — stratégie pour GitHub
  • \n
  • express-session — pour le stockage des sessions
  • \n
\n\n

Installez-les avec une seule commande :

\n
npm install express passport passport-google-oauth20 passport-github2 express-session
\n\n

Configuration de base du serveur

\n

Créons un fichier app.js et connectons tous les modules nécessaires :

\n
const express = require('express');\nconst passport = require('passport');\nconst session = require('express-session');\nconst app = express();\n\n// Configuration des sessions\napp.use(session({\n    secret: 'votre-clé-secrète',\n    resave: false,\n    saveUninitialized: true\n}));\n\napp.use(passport.initialize());\napp.use(passport.session());\n\n// Fonctions de sérialisation de l'utilisateur (simulées)\npassport.serializeUser((user, done) => done(null, user));\npassport.deserializeUser((obj, done) => done(null, obj));\n\napp.listen(3000, () => console.log('Serveur démarré sur le port 3000'));
\n\n

Configuration de la stratégie OAuth pour Google

\n

Avant de commencer, vous devez enregistrer votre application dans la Google Cloud Console et obtenir un Client ID et un Client Secret. Spécifiez dans les paramètres l'URI de redirection : http://localhost:3000/auth/google/callback.

\n\n
const GoogleStrategy = require('passport-google-oauth20').Strategy;\n\npassport.use(new GoogleStrategy({\n    clientID: 'VOTRE_GOOGLE_CLIENT_ID',\n    clientSecret: 'VOTRE_GOOGLE_CLIENT_SECRET',\n    callbackURL: 'http://localhost:3000/auth/google/callback'\n}, (accessToken, refreshToken, profile, done) => {\n    // Ici, vous pouvez enregistrer le profil dans la base de données\n    return done(null, profile);\n}));\n\n// Routes pour Google OAuth\napp.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));\n\napp.get('/auth/google/callback', \n    passport.authenticate('google', { failureRedirect: '/' }),\n    (req, res) => res.redirect('/profile')\n);
\n\n

Configuration de la stratégie OAuth pour GitHub

\n

Pour GitHub, enregistrez une application OAuth dans les Paramètres développeur GitHub. URL de la page d'accueil : http://localhost:3000, URI de rappel d'autorisation

Recommendations