📜  nodejs 中的令牌认证 - Javascript (1)

📅  最后修改于: 2023-12-03 14:44:44.245000             🧑  作者: Mango

Node.js 中的令牌认证

在 Web 应用程序开发中,令牌认证是一种常见的身份验证方式。它通过发放令牌来实现在不暴露用户凭证的情况下访问资源的机制。

在 Node.js 中,我们可以使用一些库来实现令牌认证。以下是介绍如何使用 jsonwebtoken 库实现基于令牌的授权认证的示例。

安装 jsonwebtoken

首先,需要安装 jsonwebtoken 库。

npm install jsonwebtoken
生成 JWT 令牌

下面是生成 JWT 令牌的示例代码:

const jwt = require('jsonwebtoken');
const secretKey = 'mySecretKey';

const payload = {
    user: {
        id: '1234567890',
        name: 'John Doe'
    }
};

const options = {
    expiresIn: '1h',
    issuer: 'myApp'
};

const token = jwt.sign(payload, secretKey, options);
console.log(token);

这里我们使用 jwt.sign(payload, secretKey, options) 方法生成 JWT 令牌。

payload 是一个对象,用于指定在令牌中使用的信息。例如包含用户 ID 和姓名。secretKey 是一个字符串,用于生成签名并验证令牌。options 包含一些可选的配置项,例如过期时间和发布者。jwt.sign 方法返回生成的 JWT 令牌字符串。

验证 JWT 令牌

下面是验证 JWT 令牌的示例代码:

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoiMTIzNDU2Nzg5MCIsIm5hbWUiOiJKb2huIERvZSJ9LCJpYXQiOjE2MzE1NDE1NjcsImV4cCI6MTYzMTU0NDM2NywiaXNzIjoibXlBcHAifQ.h8vnbUOVWB_JdC51LRjKja8HQ6x0ulNHQIpE2Fh1yN8';
const secretKey = 'mySecretKey';

jwt.verify(token, secretKey, (err, decoded) => {
    if (err) {
        console.log(err.message);
    } else {
        console.log(decoded);
    }
});

这里我们使用 jwt.verify(token, secretKey, callback) 方法验证 JWT 令牌。

token 是我们要验证的 JWT 令牌字符串。secretKey 是与生成令牌时使用的密钥一致的密钥。callback 是一个回调函数,它将解码后的负载作为第二个参数返回,如果令牌验证失败,会抛出一个错误。

总结

以上就是在 Node.js 中使用 jsonwebtoken 库实现令牌认证的一个例子。使用 JWT 令牌进行身份验证具有以下优点:

  • 无状态:令牌中可以包含用户信息,使无需在后端存储用户凭证。
  • 可扩展性:令牌相对较小且易于传递,使其适用于分布式系统中的身份验证。
  • 安全性:JWT 令牌具有签名和加密功能,可以保护用户信息的安全性。
参考资料