【翻译】在Nodejs中使用JSON WEB Tokens(Nodejs相关)

【翻译】在Nodejs中使用JSON WEB Tokens(Nodejs相关)

jwt-simple不错,用过 ·~

10 回复

【翻译】在Node.js中使用JSON WEB Tokens(Node.js相关)

JWT (JSON Web Token) 是一种开放标准 (RFC 7519),用于在网络应用环境间安全地将信息作为 JSON 对象传输。它通常用于身份验证和信息交换。

为什么使用 JWT?

  • 无状态:服务器不需要存储会话数据。
  • 跨域支持:可以轻松地跨域进行身份验证。
  • 易于扩展:可以很容易地与其他认证机制结合使用。

使用 jwt-simple

jwt-simple 是一个轻量级的库,用于生成和验证 JWT。你可以通过 npm 安装它:

npm install jwt-simple

示例代码

生成 JWT

假设你有一个用户对象,其中包含用户的 ID 和名称:

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

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

// 设置一个过期时间
const exp = Math.floor(Date.now() / 1000) + (60 * 60); // 1小时后过期

// 创建 JWT
const token = jwt.encode(user, 'your_secret_key', 'HS256', { exp: exp });

console.log(token);

在这个例子中,我们使用 jwt-simpleencode 方法来创建一个 JWT。'your_secret_key' 是你的密钥,用于加密和解密 JWT。exp 是过期时间戳。

验证 JWT

现在,让我们看看如何验证接收到的 JWT:

const decoded = jwt.decode(token, 'your_secret_key', false, 'HS256');

if (decoded.exp <= Date.now()) {
    console.log("Token has expired");
} else {
    console.log("Token is valid:", decoded);
}

在这个例子中,我们使用 decode 方法来解码 JWT,并检查其是否已过期。

总结

使用 JWT 可以帮助你在 Node.js 应用程序中实现安全的身份验证。jwt-simple 库提供了简单易用的 API 来生成和验证 JWT。确保妥善保管你的密钥,因为它是保护 JWT 安全的关键。


希望这个翻译对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时提问。


感谢!正好有这方面需求!就用楼主的教程了

不错学习学习

有个疑问, 如果这个token被截获, 那无论是谁只要拿这个原封不懂的token请求服务端, 那岂不是都能验证通过,继而对你后面的API都有访问权限了么?

好文,谢谢分享

就是获取token的不是在页面ajax提交账号密码换取的,而是判断是否登录,不是就重定向到第三方换取一个code后,服务器直接用这个code生成一个token返回,这时返回的数据怎么交给页面保存?

node怎么获取头部token,我就是传递了头部信息,还是获取不到token!!!

正在学习,感谢翻译君

当然可以!下面是关于如何在Node.js中使用JSON Web Tokens (JWT) 的示例代码和解释。

1. 安装依赖包

首先,我们需要安装 jsonwebtokenjws 包。jsonwebtoken 是一个常用的库,用于生成和验证 JWTs。

npm install jsonwebtoken

2. 生成JWT

我们可以创建一个简单的函数来生成JWT:

const jwt = require('jsonwebtoken');

// 定义一个函数来生成JWT
function generateToken(user) {
    const payload = {
        sub: user.id, // subject (用户ID)
        name: user.name,
        iat: Math.floor(Date.now() / 1000), // issued at time (发行时间)
        exp: Math.floor(Date.now() / 1000) + (60 * 60) // expiration time (过期时间)
    };

    const token = jwt.sign(payload, 'your_secret_key', { algorithm: 'HS256' });

    return token;
}

// 示例用户数据
const user = {
    id: 1,
    name: 'John Doe'
};

// 生成JWT
const token = generateToken(user);
console.log(token);

3. 验证JWT

接下来,我们创建一个函数来验证JWT是否有效:

function verifyToken(token) {
    try {
        const decoded = jwt.verify(token, 'your_secret_key');
        console.log('Token is valid:', decoded);
    } catch (err) {
        console.error('Token is invalid:', err.message);
    }
}

// 示例JWT
const exampleToken = 'eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6ICJKb2huIERvZSIsImlhdCI6IDE1MTYyMzAwMjksICJleHAiOiAxNTE2MjMwMDI5fQ.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ';

// 验证JWT
verifyToken(exampleToken);

解释

  • 生成JWT:使用 jwt.sign 方法生成JWT。sub 代表主体(通常是用户的ID),name 是用户名,iat 表示签发时间,exp 表示过期时间。

  • 验证JWT:使用 jwt.verify 方法验证JWT。如果JWT有效,则返回解码后的payload;如果无效,则抛出错误。

希望这些示例能帮助你理解如何在Node.js中使用JWT。如果你有任何进一步的问题,请随时提问!

回到顶部