是否可以在不使用框架的情况下在 Node.js 中创建 JWT 身份验证或类似的东西?

问题描述

我正在创建一个网站,我知道最好的身份验证是通过 JWT,但我不喜欢框架,因为我喜欢深入代码并理解我文件中的所有代码。因此,我问是否有人在纯 Node.js 中完成了它或类似的操作,是否可以向我解释如何做到这一点。

谢谢

解决方法

是的,当然有可能,只是考虑框架是如何制作的。不涉及魔法,只涉及知识和大量 javascript 代码。

您可以在 Github 上找到大多数框架的来源并在那里进行研究。

第一步,您应该熟悉 JWT 的基础知识,例如借助此introduction并阅读RFC7519

您会发现,JWT 基本上由 base64url 编码的 JSON 对象和 base64url 编码的签名组成。

最简单的签名算法是 HS256 (HMAC-SHA256)。

jwt.io debugger 窗口中,您会在右栏中看到用于创建 JWT 签名的伪代码:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),secret
)

所以基本上你需要学习:

  • 哪些信息会进入 JWT 标头和负载(即 claims
  • 如何base64url对字符串或字节数组进行编码
  • 如何创建SHA256 hash
  • 如何使用散列算法创建 HMAC

有了这个,您已经有了一个基本的 JWT 框架,可以让您创建签名令牌并验证签名。

在下一步中,您可以添加“功能”,例如

  • 验证过期时间
  • 发行人、受众的验证
  • 高级签名算法。

您可以使用 jwt.io debugger 检查您的令牌是否可以被解码和验证。