什么是 JWT?
JWT(JSON Web Token)是一种用于在网络上传递信息的安全方式。它是一种基于 JSON 的开放标准,用于在各方之间安全地传输信息。JWT 通常用于身份验证和授权。
为什么要使用 JWT?
在传统的身份验证和授权方式中,服务器会在每个请求中包含一个会话 ID,以便识别用户并授予其访问权限。但是,在分布式系统中,会话 ID 不太适用,因为它无法跨多个服务器共享。
JWT 解决了这个问题,因为它是一种无状态的身份验证和授权方式。这意味着服务器不需要在每个请求中包含会话 ID,而是使用 JWT 来验证和授权用户。
如何使用 Express.js 实现 JWT 的授权认证?
下面是一些步骤,帮助您在 Express.js 中实现 JWT 的授权认证。
步骤 1:安装依赖
首先,您需要安装以下依赖项:
npm install express jsonwebtoken body-parser cors
步骤 2:设置 Express.js 应用程序
在您的 Express.js 应用程序中,您需要设置以下内容:
// javascriptcn.com 代码示例 const express = require('express'); const bodyParser = require('body-parser'); const jwt = require('jsonwebtoken'); const cors = require('cors'); const app = express(); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(cors()); const secretKey = 'my_secret_key'; app.listen(3000, () => { console.log('Server started on port 3000'); });
步骤 3:创建路由
接下来,您需要创建路由来处理用户登录和授权请求。以下是一个例子:
// javascriptcn.com 代码示例 app.post('/login', (req, res) => { const { username, password } = req.body; if (username === 'admin' && password === 'password') { const token = jwt.sign({ username }, secretKey, { expiresIn: '1h' }); res.json({ token }); } else { res.status(401).json({ message: 'Invalid credentials' }); } }); app.get('/protected', verifyToken, (req, res) => { res.json({ message: 'Protected route' }); }); function verifyToken(req, res, next) { const bearerHeader = req.headers['authorization']; if (typeof bearerHeader !== 'undefined') { const bearerToken = bearerHeader.split(' ')[1]; req.token = bearerToken; next(); } else { res.status(403).json({ message: 'Forbidden' }); } }
在上面的代码中,/login
路由处理用户登录请求,如果用户名和密码正确,则生成 JWT 并将其发送回客户端。/protected
路由是一个受保护的路由,只有在 JWT 有效时才能访问。verifyToken
函数用于验证 JWT。
步骤 4:验证 JWT
最后,您需要编写代码来验证 JWT。以下是如何验证 JWT 的示例代码:
// javascriptcn.com 代码示例 function verifyToken(req, res, next) { const bearerHeader = req.headers['authorization']; if (typeof bearerHeader !== 'undefined') { const bearerToken = bearerHeader.split(' ')[1]; req.token = bearerToken; jwt.verify(req.token, secretKey, (err, authData) => { if (err) { res.status(403).json({ message: 'Forbidden' }); } else { next(); } }); } else { res.status(403).json({ message: 'Forbidden' }); } }
在上面的代码中,verifyToken
函数首先从请求头中获取 JWT,然后使用 jwt.verify
方法来验证 JWT。如果 JWT 无效,则返回 403 错误。
总结
在本文中,我们学习了如何使用 Express.js 实现 JWT 的授权认证。JWT 是一种无状态的身份验证和授权方式,可以在分布式系统中使用。通过使用 JWT,我们可以在不使用会话 ID 的情况下验证和授权用户。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650bfdec95b1f8cacd610a6e