Az OAuth gyors bemutatása a Passport.js használatával

Mi az OAuth?

Az OAuth (Open Authorization) egy engedélyezési protokoll. Harmadik féltől származó alkalmazás hozzáférhet a webhely felhasználói adataihoz (például a Google vagy a Twitter) anélkül, hogy elárulná a jelszavukat. Az olyan webhelyek, mint a Quora, a Medium, az AirBnb és még sokan mások, az OAuth használatával kínálnak hitelesítést.

Az OAuth valóban egyszerűbbé teszi az életünket azzal, hogy feleslegessé teszi a szinte minden webhelyen létrehozott minden fiók jelszavának emlékét. Csak emlékeznie kell az OAuth szolgáltató fő fiókjának jelszavára.

Mi a Passport.js?

A Passport egy köztes szoftver, amely az Express-alapú webalkalmazásokon valósítja meg a hitelesítést. Több mint 500 stratégiát kínál. Mik ezek a stratégiák? A kérelmek hitelesítésére stratégiákat használnak. Minden stratégiának saját npm csomagja van (például passport-twitter, passport-google-oauth20). Használat előtt be kell állítani egy stratégiát.

Miért használja a Passport.js fájlt?

Itt van hat ok arra vonatkozóan, hogy miért kell használni az útlevelet:

  • Könnyű
  • Könnyen konfigurálható
  • Támogatja a tartós munkameneteket
  • Ajánlatok OAuth
  • Külön modulokat biztosít minden stratégiához
  • Lehetővé teszi az egyéni stratégiák végrehajtását

Építsünk valamit

A kezdéshez telepítenünk kell az NPM útlevelét:

npm install passport 

Egy egyszerű alkalmazást fogunk készíteni, amely csak akkor engedélyezi a felhasználó számára a titkos útvonal elérését, ha bejelentkezik. Ebben az oktatóanyagban a passport-google-oauth20 stratégiát fogom használni. Használjon bátran bármilyen más stratégiát, amelyet előnyben részesít, de mindenképpen ellenőrizze a dokumentumokat, hogy konfigurálják.

A folytatás előtt szükségünk van egy clientID-re és clientSecret-re. Ha egyet szeretne kapni, lépjen a //console.developers.google.com webhelyre, és hozzon létre egy új projektet. Ezután lépjen az API-k és szolgáltatások engedélyezése és engedélyezze a Google+ API-t. Válassza ki az API-t, és kattintson a hitelesítő adatok létrehozására.

Töltse ki az űrlapot, és ugyanazt a visszahívási URL-t használja mind az űrlapon, mind a fájlján. Feltétlenül olvassa el a kódhoz fűzött megjegyzéseket, hogy kiderüljön, hogy minden összeillik.

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

Amint láthatja, létrehoztunk egy /secretútvonalat, és csak akkor adunk hozzáférést hozzá, ha a felhasználó hitelesítve van. A felhasználó hitelesítésének ellenőrzéséhez létrehoztunk egy köztes szoftvert, amely ellenőrzi, hogy a kérelem tartalmaz-e felhasználói objektumot. Végül a kijelentkezéshez req.logout()az útlevél által biztosított módszert használtuk a munkamenet törléséhez.

Íme néhány forrás az útlevélről

A Passport.js hivatalos dokumentációja

Egyszerű, nem feltűnő hitelesítés a Node.js www.passportjs.org webhelyhez

Következtetés

Itt csak egy stratégiát láttunk. 500+ van még. Nagyon ajánlom, hogy nézze át a Passport hivatalos dokumentációját, és derítse ki, mit kínálnak még. Köszönjük, hogy időt szánt ennek elolvasására. Lépjen kapcsolatba velem nyugodtan a LinkedIn, a Twitter és a GitHub szolgáltatásain. Sok sikert kívánok neked!

Előző cikk

Gyors bemutatás az anyagtervezésről a Materialize segítségével

Mi az anyagtervezés? medium.freecodecamp.org