En hurtig introduktion til OAuth ved hjælp af Passport.js

Hvad er OAuth?

OAuth (Open Authorization) er en godkendelsesprotokol. En tredjepartsapplikation kan bruge den til at få adgang til brugerdata fra et websted (som Google eller Twitter) uden at afsløre deres adgangskode. Websteder som Quora, Medium, AirBnb og mange andre tilbyder godkendelse ved hjælp af OAuth.

OAuth gør vores liv virkelig enklere ved at fjerne behovet for at huske adgangskoden til hver konto, du opretter på næsten ethvert websted. Du skal bare huske din OAuth-udbyders hovedadgangskode.

Hvad er Passport.js?

Passport er en middleware, der implementerer godkendelse på Express-baserede webapplikationer. Det giver over 500+ strategier. Hvad er disse strategier? Strategier bruges til at godkende anmodninger. Hver strategi har sin egen npm-pakke (såsom pas-twitter, pas-google-oauth20). En strategi skal konfigureres inden brug.

Hvorfor bruge Passport.js?

Her er seks grunde, der angiver, hvorfor du skal bruge pas:

  • Det er let
  • Let konfigurerbar
  • Understøtter vedvarende sessioner
  • Tilbyder OAuth
  • Tilbyder separate moduler til hver strategi
  • Giver dig muligheden for at implementere brugerdefinerede strategier

Lad os bygge noget

For at komme i gang skal vi installere pas fra NPM:

npm install passport 

Vi skal bygge en simpel app, der kun giver brugeren adgang til en hemmelig rute, hvis de logger ind. Jeg bruger strategien pas-google-oauth20 i denne vejledning. Du er velkommen til at bruge enhver anden strategi, du foretrækker, men sørg for at tjekke dokumenterne for at se, hvordan den er konfigureret.

Før vi fortsætter, har vi brug for et clientID og clientSecret. For at få en skal du gå over til //console.developers.google.com og oprette et nyt projekt. Gå derefter til Aktivér API'er og tjenester, og aktiver Google+ API. Vælg API og klik på Opret legitimationsoplysninger.

Udfyld formularen og brug den samme URL til tilbagekaldelse på både formularen og i din fil. Sørg for at læse kommentarerne til koden for at finde ud af, hvordan alt passer sammen.

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

Som du kan se, har vi oprettet en /secretrute og giver kun adgang til den, hvis brugeren er godkendt. For at kontrollere, om brugeren er godkendt, har vi oprettet en middleware, der kontrollerer, om anmodningen indeholder brugerobjektet. Til sidst, for at logge af, brugte vi req.logout()metoden leveret af pas til at rydde sessionen.

Her er nogle ressourcer til at lære mere om pas

Officiel dokumentation for Passport.js

Enkel, diskret godkendelse af Node.js www.passportjs.org

Konklusion

Vi så kun en strategi her. Der er 500+ flere. Jeg kan varmt anbefale, at du gennemgår Passports officielle dokumentation og finder ud af, hvad de ellers tilbyder. Tak fordi du tog dig tid til at læse dette. Du er velkommen til at oprette forbindelse til mig på LinkedIn, Twitter og GitHub. Jeg ønsker dig held og lykke!

Forrige artikel

En hurtig introduktion til Material Design ved hjælp af Materialize

Hvad er materialedesign? medium.freecodecamp.org