0


node.js如何使用JWT(JSON Web Token)进行认证?

在现代Web开发中,认证是一个非常重要的环节。为了管理控制用户的访问权限,使用JWT(JSON Web Token)进行认证是一个非常流行和安全的方法。JWT是一种令牌在客户端和服务器之间安全地传信息。在这篇博客中,我将详细介绍如何在Node.js中使用JWT进行认证,包含示例代码,帮助您理解其概念和使用方法。

什么是JWT?

JSON Web Token(JWT)是一种用于声明某些权利的JSON对象。它通常是一个长字符串,由三个部分组成,分别用点(.)分:

  1. 头部(Header)
  2. 载荷(Payload)
  3. 签名(Signature)

. 头部(Header)

头部通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法(例如 HMAC SHA256 或 RSA)。

{"alg":"HS256","typ":"JWT"}

2. 载荷(Payload)

载荷部分包含声明(Claims),声明是关于实体(通常是用户)和附加数据的信息。声明有三类型:registered, public, 和 private。存储在此部分中的信息是明文的,不加密存储,因此不应包含敏感数据。

一个简单的载荷可能包含这样的信息:

{"sub":"1234567890","name":"John Doe","admin":true}

3 签名(Signature)

要创建签名部分,可以将编码后的头部、编码后的载荷和一个密结合在一起,并使用指定的签名算法对其进行签名。例如,如果使用 HMAC SHA256 算法,签名将是这样计算的:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret
)

签名用于验证消息在传输过程中是否未被篡改。

在Node.js中使用JWT

下面是一个完整的示例,展示了如何在Node.js中使用JWT进行用户认证。

1.装必要包

首先,我们需要安装一些包,包括

jsonwebtoken

express

npminstall express jsonwebtoken body-parser

2. 创建Express服务器

接下来,我们将创建一个简单的Express服务器,并使用JWT进行用户认证。

const express =require('express');const bodyParser =require('body-parserconst jwt = require('jsonwebtoken');const app =express();constPORT= process.env.PORT||3000;constSECRET_KEY='your-256-bit-secret';

app.useParser.json());// 模拟一个用户数据库const users =[{id:1,username:'john',password:'password123'}];// 登录接口
app.post('/login',(req, res)=>{const{ username, password }= req.body;// 验证用户名和密码const user = users.find(u=> u.username === username && u.password === password);if(user){const token = jwt.sign({id: user.id,username: user.username },SECRET_KEY,{expiresIn:'1h'});
        res.json({ token });}else{
        res.status(401).json({message:'用户名或密码错误!'});}});// 认证中间件constauthenticateJWT=(req, res, next)=>{const token = req.header('Authorization');if(token){
        jwt.verify(token,SECRET_KEY,(err, user)=>{if(err){return res.sendStatus(403);}
            req.user = user;next();});}else{
        res.sendStatus(401);}};// 受保护的接口
app.get('/protected', authenticateJWT,(req, res)=>{
    res.json({message:'您已经成功访问了受保护的路由!'});});

app.listen(PORT,()=>{
    console.log(`服务器运行在 http://localhost:${PORT}`);});

在上面的示例中,我们创建了一个简单的Express应用程序,并包含了以下关键部分:

2.1 登录接口

登录接口(

/login

)用于验证用户的用户名和密码。如果验证成功,会生成一个JWT,并将其返回给客户端。

2.2 认证中间件

authenticateJWT

中间件用于验证请求是否携带有效的JWT。如果携带了有效的JWT,则该请求被允许继续,否则响应状态将为401 (Unauthorized) 或403 (Forbidden)。

2.3 受保护的接口

受保护的接口(

/protected

)使用

authenticateJWT

中间件进行保护,只有携带有效的请求才能访问。

如何测试你可以使用

curl

或任何HTTP客户端(如Postman)来测试以上示例应用。

1. 登录

首先,通过

/login

接口获取JWT:

curl-H"Content-Type: application/json"-X POST -d'{"username":"john", "password":"password123"}' http://localhost:3000/login

你会得到类似如下的响应,其中包含生成的JWT:

{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...rest_of_token"}

2. 访问受保护的接口

接下来,使用获取的JWT访问受保护的接口:

curl-H"Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...rest_of_token" http://localhost:3000/protected

如果JWT有效,你将得到以下响应:

{"message":"您已经成功访问了受保护的路由!"}

如果JWT无效,服务器将返回403或401状态。

总结

在这篇博客中,我们详细介绍了如何在Node.js中使用JWT进行用户认证。我们讨论了JWT的基本构成及其组成部分,并提供了完整的Node.js示例代码来说明如何实现JWT认证。通过这个示例,你可以将JWT轻松集成到你的Web应用中,实现安全和高效的用户认证。


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

在这里插入图片描述

标签: node.js json 前端

本文转载自: https://blog.csdn.net/yuanlong12178/article/details/140169858
版权归原作者 JJCTO袁龙 所有, 如有侵权,请联系我们删除。

“node.js如何使用JWT(JSON Web Token)进行认证?”的评论:

还没有评论