📜  有效的 jwt - TypeScript (1)

📅  最后修改于: 2023-12-03 15:26:30.361000             🧑  作者: Mango

有效的 JWT - TypeScript

JSON Web Tokens(JWTs)是一种常见的身份验证和授权机制,它们使得通过 Web 应用程序进行安全通信变得更加便捷。在本文中,我们将探讨如何在 TypeScript 中使用有效的 JWT。

基本原理

JWT 由三部分组成:

  1. 一个头部,它描述了 JWT 的类型和使用的算法。
  2. 一个负载,它包含了 JWT 的真实数据。
  3. 一个签名,它使用算法将头部和负载组合起来,生成一个安全令牌,以确保令牌安全性。

一个典型的 JWT 的结构如下所示:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

可以看到,JWT 由三部分组成,它们以点号(.)分隔开来。各部分的含义如下:

  1. 头部:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    • alg 属性指定所使用的签名算法,例如 HS256 表示 HMAC-SHA256,RS256 表示 RSA 非对称密钥。
    • typ 属性指定该 Token 的类型,例如 JWT。
  2. 负载:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
    • iss (issuer):签发人
    • exp (expiration time):过期时间,单位秒
    • sub (subject):主题
    • aud (audience):受众
    • iat (issued at):签发时间,单位秒
    • jti (JWT ID):编号
  3. 签名:SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
使用 JWT

在 TypeScript 中,我们可以使用 jsonwebtoken 库来生成和验证 JWT,它可以从 npm 上下载和安装依赖:

npm install jsonwebtoken --save

下面是一些 JWT 的基本操作。

生成 JWT
import jwt from 'jsonwebtoken';

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

console.log(token);
// "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoiZm9vYmFyIiwiaWF0IjoxNjMwMTY1NjU2LCJleHAiOjE2MzAxNjkyNTZ9.X-O4vFO0j-EWnsMTIWi1snoWLXeiYYt8JjWAEcLTtZE"
验证 JWT
import jwt from 'jsonwebtoken';

const token = 'eyJhbGciOiJIU...';

try {
  const decoded = jwt.verify(token, 'secret');
  console.log(decoded);
  // { data: 'foobar', iat: 1630165656, exp: 1630169256 }
} catch (err) {
  console.error(err);
}
验证用户

现在我们有了一个 JWT,我们可以将其发送给服务器,在服务器上验证 JWT 并获取用户信息。下面代码演示了如何验证和获取 JWT 中的用户信息。

import jwt from 'jsonwebtoken';

const token = 'eyJhbGciOiJIU...';

try {
  const decoded = jwt.verify(token, 'secret');

  const user = await User.findOne({
    _id: decoded.userId,
    'tokens.token': token,
  });

  if (!user) {
    throw new Error('Unable to find user.');
  }

  console.log(user);
} catch (err) {
  console.error(err);
}
总结

在 TypeScript 中使用 JWT 非常方便,只需要安装依赖并使用 jsonwebtoken 库即可。上面的代码示例演示了如何使用 jsonwebtoken 来生成和验证 JWT,并获取 JWT 中的用户信息。使用 JWT 可以使我们的应用更加安全和便捷。