API认证与JSON Web Tokens(JWT)详解
作者:xiaoxin.gao · 2025-07-04 · 阅读时间:4分钟
欢迎来到API认证与JSON Web Tokens(JWT)详解!本文我们将深入探讨如何使用JWT进行API认证,以及如何保护API路由。让我们开始吧!
认证需求
在现代Web应用中,API认证是确保应用安全的关键步骤。通过JSON Web Tokens(JWT),我们可以有效地保护API路由,确保只有经过认证的用户才能访问特定资源。
技术栈介绍
为了实现这一目标,我们将使用以下技术栈:
- Postman:用于发送HTTP请求和测试API。
- VS Code:作为我们的代码编辑器。
- Express:一个简洁而灵活的Node.js Web应用框架。
- Node.js:运行我们的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
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 使用Python进行API调用:面向开发人员的分步指南
- Go工程化(五) API 设计下: 基于 protobuf 自动生成 gin 代码
- Python调用股票API获取实时数据
- API在量子计算中的作用
- API请求 – 什么是API请求?
- 给初学者的RESTful API 安全设计指南!
- 如何在 Facebook Developers 上设置 WhatsApp Cloud API
- 支付网关API如何支持小型企业?
- Python调用免费翻译API实现Excel文件批量翻译
- 为开源项目 go-gin-api 增加 WebSocket 模块
- AI编程的风险,如何毁掉你的 API?
- 使用预约调度API的运输管理