浅析nodejs中怎么使用JWT?

1. 什么是JWT?

JSON Web Tokens(JWT),是一种基于 JSON 格式的轻便的身份验证和授权机制。JWT在用户与服务器之间传递一些信息,该信息通过数字签名进行验证和信任。

JWT 由三部分组成:头部(header)、负载(payload)和签名(signature)。头部将描述签名的类型和负载的编码类型,负载是 JWT 存储的预期信息,签名是使用密钥创建的哈希。

大多数情况下,JWT 用于在 Web 应用程序中进行身份验证。JWT 将用户的身份信息编码成 JSON,并使用签名确保该信息不被篡改。因此,JWT 中的信息可以是一段简单的身份信息,也可以是关于用户和应用程序的详细信息,如付款历史记录或购物车内容。

2. 在Node.js中使用JWT

2.1 安装jsonwebtoken模块

要在Node.js中使用JWT,您需要安装jsonwebtoken模块。您可以使用npm在您的项目中安装jsonwebtoken,可以通过以下指令进行安装:

npm install jsonwebtoken

2.2 创建JWT

要在Node.js中创建JWT,您需要调用jsonwebtoken 模块的 sign() 方法。sign()方法需要三个参数:

要生成JWT的payload对象

密钥

可选的附加选项对象

以下是一个生成JWT的示例:

const jwt = require('jsonwebtoken');

const payload = {

user_id: 123,

user_name: 'smith',

email: 'smith@example.com'

}

const secretKey = 'your-secret-key';

const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });

console.log(token);

在上述示例中,payload 将是要编码的 JSON。secretKey 是要用于创建 JWT 的密钥。expiresIn 是在生成的 JWT 中指定的到期时间(以秒为单位)。

2.3 验证JWT

要在Node.js中验证JWT,您需要调用jsonwebtoken模块的 verify() 方法。verify() 方法需要两个参数:

您想要验证的jsonwebtoken

密钥

以下示例演示了如何验证JWT:

const jwt = require('jsonwebtoken');

const secretKey = 'your-secret-key';

const token = 'your-json-web-token';

jwt.verify(token, secretKey, (err, decoded) => {

if (err) {

console.log(err);

} else {

console.log(decoded);

}

});

在上述示例中,token 是要验证的 JSON Web Token。如果JWT验证成功,则decoded对象将是使用密钥生成JWT时指定的payload。

2.4 使用中间件实现JWT验证

您可以通过使用中间件将JWT验证逻辑添加到您的Node.js应用程序中。express-jwt是一种流行的中间件,在Express应用程序中使用。

以下是一个使用express-jwt中间件的示例代码:

const express = require('express');

const jwt = require('express-jwt');

const jwks = require('jwks-rsa');

const app = express();

const checkJwt = jwt({

secret: jwks.expressJwtSecret({

cache:true,

rateLimit: true,

jwksRequestsPerMinute: 5,

jwksUri: `your-jwks-uri`

}),

audience: 'your-audience',

issuer: 'your-domain'

});

app.get('/protected_page', checkJwt, (req, res) => {

res.send('This is a protected page!');

});

在上述示例中,checkJwt 是一个中间件函数,它通过密钥从 JWT 中解析负载,并在请求中添加req.user属性。

3. 总结

在Node.js中使用JWT很容易。使用jsonwebtoken模块,您可以轻松地编码和解码JWT数据。您还可以使用中间件将JWT验证逻辑添加到您的应用程序中,从而为您的应用程序提供更多安全性。