在現代Web應用中,API認證是確保應用安全的關鍵步驟。通過JSON Web Tokens(JWT),我們可以有效地保護API路由,確保只有經過認證的用戶才能訪問特定資源。

技術棧介紹

為了實現這一目標,我們將使用以下技術棧:

項目初始化

首先,創建一個項目文件夾并初始化npm項目。在終端中運行以下命令:

mkdir node-auth-api
cd node-auth-api
npm init -y

搭建基本API

安裝必要的依賴:

npm install express jsonwebtoken
npm install -g nodemon

創建app.js文件,并編寫基本的Express API代碼:

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();

app.get('/api', (req, res) => {
  res.json({ message: 'Welcome to the API' });
});

const PORT = 5000;
app.listen(PORT, () => {
  console.log(`Server started on port ${PORT}`);
});

運行以下命令啟動服務器:

nodemon app.js

使用Postman測試API:

GET http://localhost:5000/api

創建受保護路由

接下來,創建一個受保護的POST路由:

app.post('/api/posts', (req, res) => {
  res.json({ message: 'Post created' });
});

測試此路由:

POST http://localhost:5000/api/posts

實現登錄路由

創建一個登錄路由,用于生成和返回JWT:

app.post('/api/login', (req, res) => {
  // 在實際應用中,這里應該驗證用戶憑據
  const user = {
    id: 1,
    username: 'Brad',
    email: 'brad@gmail.com'
  };

  jwt.sign({ user }, 'your_jwt_secret', { expiresIn: '30s' }, (err, token) => {
    if (err) throw err;
    res.json({ token });
  });
});

測試登錄路由:

POST http://localhost:5000/api/login

驗證令牌

實現一個中間件函數,用于驗證請求中的JWT:

function verifyToken(req, res, next) {
  const bearerHeader = req.headers['authorization'];
  if (typeof bearerHeader !== 'undefined') {
    const bearer = bearerHeader.split(' ');
    const bearerToken = bearer[1];
    req.token = bearerToken;
    jwt.verify(req.token, 'your_jwt_secret', (err, authData) => {
      if (err) {
        res.sendStatus(403);
      } else {
        next();
      }
    });
  } else {
    res.sendStatus(403);
  }
}

將中間件應用于受保護路由:

app.post('/api/posts', verifyToken, (req, res) => {
  res.json({ message: 'Post created', authData: req.authData });
});

測試受保護路由

在Postman中測試受保護路由。在請求頭中包含JWT:

Authorization: Bearer <your_jwt_token>
POST http://localhost:5000/api/posts

設置令牌過期時間

在登錄路由中設置JWT過期時間:

jwt.sign({ user }, 'your_jwt_secret', { expiresIn: '30s' }, (err, token) => {
  if (err) throw err;
  res.json({ token });
});

測試過期的JWT:

POST http://localhost:5000/api/posts

總結

通過本教程,我們學習了如何使用JWT保護API路由。從項目搭建到令牌驗證,我們全面掌握了API認證的核心技能。希望這些內容對你有所幫助!

原文引自YouTube視頻:https://www.youtube.com/watch?v=7nafaH9SddU

上一篇:

REST API 的基礎知識

下一篇:

API的未來:從基礎到進階,如何高效管理與集成各類API
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費