Eine kurze Einführung in OAuth mit Passport.js

Was ist OAuth?

OAuth (Open Authorization) ist ein Autorisierungsprotokoll. Eine Drittanbieteranwendung kann damit auf Benutzerdaten von einer Website (wie Google oder Twitter) zugreifen, ohne deren Kennwort preiszugeben. Websites wie Quora, Medium, AirBnb und viele andere bieten Authentifizierung mit OAuth an.

OAuth macht unser Leben wirklich einfacher, da Sie sich nicht mehr das Passwort jedes Kontos merken müssen, das Sie auf fast jeder Website erstellen. Sie müssen sich nur das Passwort des Hauptkontos Ihres OAuth-Anbieters merken.

Was ist Passport.js?

Passport ist eine Middleware, die die Authentifizierung in Express-basierten Webanwendungen implementiert. Es bietet über 500 Strategien. Was sind diese Strategien? Strategien werden verwendet, um Anforderungen zu authentifizieren. Jede Strategie hat ein eigenes npm-Paket (z. B. passport-twitter, passport-google-oauth20). Vor der Verwendung muss eine Strategie konfiguriert werden.

Warum Passport.js verwenden?

Hier sind sechs Gründe, warum Sie Passport verwenden sollten:

  • Es ist leicht
  • Einfach zu konfigurieren
  • Unterstützt dauerhafte Sitzungen
  • Bietet OAuth an
  • Bietet separate Module für jede Strategie
  • Bietet Ihnen die Möglichkeit, benutzerdefinierte Strategien zu implementieren

Lass uns etwas bauen

Um loszulegen, müssen wir den Pass von NPM installieren:

npm install passport 

Wir werden eine einfache App erstellen, die dem Benutzer nur dann Zugriff auf eine geheime Route gewährt, wenn er sich anmeldet. In diesem Tutorial werde ich die Strategie passport-google-oauth20 verwenden. Sie können auch eine andere Strategie verwenden, die Sie bevorzugen. Überprüfen Sie jedoch die Dokumente, um festzustellen, wie sie konfiguriert sind.

Bevor wir fortfahren, benötigen wir eine clientID und clientSecret. Um eines zu erhalten, gehen Sie zu //console.developers.google.com und erstellen Sie ein neues Projekt. Gehen Sie dann zu APIs und Dienste aktivieren und aktivieren Sie die Google+ API. Wählen Sie die API aus und klicken Sie auf Anmeldeinformationen erstellen.

Füllen Sie das Formular aus und verwenden Sie dieselbe Rückruf-URL sowohl für das Formular als auch für Ihre Datei. Lesen Sie unbedingt die Kommentare zum Code, um herauszufinden, wie alles zusammenpasst.

app.js.

// Required dependencies const express = require('express'); const app = express(); const passport = require('passport'); const GoogleStrategy = require('passport-google-oauth20'); const cookieSession = require('cookie-session'); // cookieSession config app.use(cookieSession({ maxAge: 24 * 60 * 60 * 1000, // One day in milliseconds keys: ['randomstringhere'] })); app.use(passport.initialize()); // Used to initialize passport app.use(passport.session()); // Used to persist login sessions // Strategy config passport.use(new GoogleStrategy({ clientID: 'YOUR_CLIENTID_HERE', clientSecret: 'YOUR_CLIENT_SECRET_HERE', callbackURL: '//localhost:8000/auth/google/callback' }, (accessToken, refreshToken, profile, done) => { done(null, profile); // passes the profile data to serializeUser } )); // Used to stuff a piece of information into a cookie passport.serializeUser((user, done) => { done(null, user); }); // Used to decode the received cookie and persist session passport.deserializeUser((user, done) => { done(null, user); }); // Middleware to check if the user is authenticated function isUserAuthenticated(req, res, next) { if (req.user) { next(); } else { res.send('You must login!'); } } // Routes app.get('/', (req, res) => { res.render('index.ejs'); }); // passport.authenticate middleware is used here to authenticate the request app.get('/auth/google', passport.authenticate('google', { scope: ['profile'] // Used to specify the required data })); // The middleware receives the data from Google and runs the function on Strategy config app.get('/auth/google/callback', passport.authenticate('google'), (req, res) => { res.redirect('/secret'); }); // Secret route app.get('/secret', isUserAuthenticated, (req, res) => { res.send('You have reached the secret route'); }); // Logout route app.get('/logout', (req, res) => { req.logout(); res.redirect('/'); }); app.listen(8000, () => { console.log('Server Started!'); }); 

index.ejs

  • Login
  • Secret
  • Logout

Wie Sie sehen, haben wir eine /secretRoute erstellt und gewähren nur dann Zugriff darauf, wenn der Benutzer authentifiziert ist. Um zu überprüfen, ob der Benutzer authentifiziert ist, haben wir eine Middleware erstellt, die überprüft, ob in der Anforderung das Benutzerobjekt enthalten ist. Zum Abmelden haben wir die req.logout()vom Pass bereitgestellte Methode verwendet, um die Sitzung zu löschen.

Hier finden Sie einige Ressourcen, um mehr über den Reisepass zu erfahren

Offizielle Dokumentation von Passport.js

Einfache, unauffällige Authentifizierung für Node.js www.passportjs.org

Fazit

Wir haben hier nur eine Strategie gesehen. Es gibt mehr als 500. Ich empfehle Ihnen dringend, die offiziellen Unterlagen von Passport zu lesen und herauszufinden, was sie sonst noch bieten. Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen. Fühlen Sie sich frei, mit mir auf LinkedIn, Twitter und GitHub in Verbindung zu treten. Ich wünsche Dir viel Glück!

Vorheriger Artikel

Eine kurze Einführung in das Materialdesign mit Materialise

Was ist Materialdesign? medium.freecodecamp.org