21xrx.com
2024-12-27 21:32:18 Friday
登录
文章检索 我的文章 写文章
使用 Node.js 的 Token 进行接口验证
2023-07-03 12:12:19 深夜i     --     --
Node js Token 接口验证

随着互联网技术的不断发展和应用,网络安全问题日益引人关注。在前后端交互过程中,接口验证是一项不可忽视的安全措施。传统的基于用户名和密码的验证方式存在某些缺陷,比如信息泄露、密码不安全等问题。因此,目前很多互联网企业和开发者都采用了 Token 验证方式来增加系统的安全性和可靠性。

Token 是一种特殊的字符串,可以在客户端和服务器端之间传递,用于标识某个用户的身份和权限。客户端在登录成功后会拿到一个 Token,然后把 Token 带在每个请求的 header 中发给服务器端,服务器端可以通过解密 Token 来判断该请求是否合法。如果 Token 验证失败,服务器端会返回相应的错误码,从而保证接口的安全性和保密性。

Node.js 是一种非常流行的后端开发语言,它具有高效、快速、稳定等优点,非常适合进行接口验证。Node.js 配合 Express 框架可以实现简单易用的 Token 验证方式。下面是一个具体的实现步骤:

1. 安装相关依赖

安装 jsonwebtoken 和 express-jwt 两个依赖库,它们分别用于生成 Token 和验证 Token。


npm install jsonwebtoken express-jwt --save

2. 生成 Token

当用户在客户端输入正确的用户名和密码后,服务器端可以生成一个 Token 并返回给客户端,代码如下:


const jwt = require('jsonwebtoken');

const token = jwt.sign( username: 'admin', 'secret', { expiresIn: '1h' });

return res.json(

  message: '登录成功');

其中,第一个参数为存储在 Token 中的数据,第二个参数为私钥,第三个参数为 Token 的有效期。

3. 验证 Token

在 Express 中,可以使用 express-jwt 中间件来验证 Token。当客户端发送请求时,中间件会自动解密 Token 并把解密后的数据存放在 req.user 对象中,代码如下:


const express = require('express');

const jwt = require('jsonwebtoken');

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

const app = express();

const secret = 'mysecretkey';

app.use(expressJwt({

  secret: secret, // 私钥

  algorithms: ['HS256'], // 加密算法

}).unless({

  path: ['/api/login']  // 白名单,不需要验证 Token 的路径

}));

app.use(function (err, req, res, next) {

  if (err.name === 'UnauthorizedError') {

    res.status(401).send('invalid token…');

  }

});

// 定义需要验证 Token 的接口

app.get('/api/user', function (req, res) {

  const user = req.user;

  console.log(user);

  return res.json({

    code: 200,

    message: 'success',

    data:

      name: 'Tom'

  });

});

app.listen(3000, function () {

  console.log('Server is running on port 3000!');

});

在 unless 函数中可以指定白名单,即某些接口不需要验证 Token,比如登录接口。express-jwt 中间件会自动解密 Token 并把解密后的数据存放在 req.user 对象中,开发者可以直接在路由处理函数中使用。

Token 验证方式在互联网应用中应用非常广泛,它具有安全性强、可扩展性好、实现简单等优点,因此被广泛应用于前后端交互中。通过使用 Node.js 的 Token 验证方式,开发者可以快速、简单的实现接口验证,为系统安全提供保障。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复