如何在 Node.js 中實現安全的身份驗證:使用 Passport.js 和 JWT 的完整指南
Node.js 是一個廣受歡迎的 JavaScript 執行環境,適用於開發各類應用程式,尤其是 Web 應用程式。在開發這些應用程式時,身份驗證是非常重要的一環,能確保只有授權的用戶能夠存取敏感資源。本文將深入探討如何在 Node.js 中有效實現身份驗證,並將重點放在 Passport.js 和 JSON Web Token (JWT) 的使用上。
為什麼選擇 Passport.js?
Passport.js 是一個輕量級的身份驗證中介軟體,具有高度的彈性,支援多種身份驗證策略,包括 OAuth、OpenID Connect 及自訂方案。這使得 Passport.js 成為許多 Node.js 開發者的首選。
要開始使用 Passport.js,首先需要安裝它:
“`bash
npm install passport
npm install passport-oauth
“`
接著,您需要在應用程式中進行基本的設定:
“`javascript
const passport = require(‘passport’);
const express = require(‘express’);
const session = require(‘express-session’);
const app = express();
app.use(session({ secret: ‘yourSecretKey’, resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
“`
現在,您可以設定身份驗證策略,例如使用 OAuth:
“`javascript
const OAuthStrategy = require(‘passport-oauth’).OAuthStrategy;
passport.use(new OAuthStrategy({
requestTokenURL: ‘…’,
accessTokenURL: ‘…’,
userAuthorizationURL: ‘…’,
consumerKey: ‘…’,
consumerSecret: ‘…’,
callbackURL: ‘…’
},
function(token, tokenSecret, profile, done) {
// 驗證成功後的處理
}));
“`
還需設定路由,讓用戶可以透過這些路由進行身份驗證:
“`javascript
app.get(‘/auth/oauth’, passport.authenticate(‘oauth’));
app.get(‘/auth/oauth/callback’,
passport.authenticate(‘oauth’, { failureRedirect: ‘/login’ }),
function(req, res) {
// 驗證成功後的處理
});
“`
使用 JSON Web Token (JWT) 進行身份驗證
JWT 是一種用於安全地發佈和驗證身份的標準,許多現代應用程式都選擇使用 JWT 來進行身份驗證。首先,安裝 jsonwebtoken 套件:
“`bash
npm install jsonwebtoken
“`
創建 JWT 的方式如下:
“`javascript
const jwt = require(‘jsonwebtoken’);
const token = jwt.sign({ userId: ‘12345’ }, ‘yourSecretKey’, { expiresIn: ‘1h’ });
“`
接著,將 JWT 傳遞給用戶:
“`javascript
res.json({ token: token });
“`
最後,在應用程式中設定路由,使得用戶可以使用 JWT 進行身份驗證:
“`javascript
app.get(‘/protected’,
passport.authenticate(‘jwt’, { session: false }),
function(req, res) {
// 驗證成功後的處理
});
“`
總結
本文介紹了如何在 Node.js 應用程式中實現安全的身份驗證,特別是使用 Passport.js 和 JSON Web Token (JWT) 的方式。這些技術不僅能增強應用程式的安全性,還能提升用戶體驗。希望本文能幫助您在 Node.js 開發中更有效地實施身份驗證。
—