在现代 web 应用程序中,JSON Web Token(JWT)用于安全传输信息。它可以在请求中携带用户信息,而无需进行 cookie 或其他 cookie 类似的跟踪策略。
Deno 是一个安全的 JavaScript 和 TypeScript 运行时,可以直接在命令行中运行,因此它很适合于用于构建安全的 web 应用程序。在本文中,我们将介绍如何在 Deno 中使用 JWT,让我们开始吧!
安装 JWT
首先,我们需要安装使用 JWT 的库。在 Deno 中,我们可以使用 Deno JWT 来生成,验证和解析 JWT。
Deno JWT 是一个功能齐全的库,允许我们生成 JWT,在 JWT 中包含有用的信息并验证 JWT。 在本例中,我们将使用它来生成和验证 JWT。
安装 Deno JWT 的命令如下:
deno install --allow-net --allow-read https://deno.land/x/djwt/ci/install.js
其中,--allow-net
和 --allow-read
权限将用于允许程序读取和写入文件以及通过网络发送请求。
如何生成 JWT
一旦我们安装了 Deno JWT,我们将介绍如何生成 JWT。
在生成 JWT 之前,我们需要设置一个密钥,该密钥将使用称为“HS256”的算法进行签名。 在本例中,我们将使用 Deno 的环境变量来存储密钥。我们可以通过以下命令在 Deno 中设置环境变量:
export JWT_SECRET=mysecretkey
现在我们可以在 code 中使用此变量来读取密钥。我们将使用以下代码来生成 JWT:
-- -------------------- ---- ------- ------ - ------- ------- -------- ------- ------- - ---- ---------------------------------- ----- ------- ------ - - ---- -------- ---- ----- -- ----- -------- ------- - - ---- ------- ---- ---------- -- ----- --- - ----- -------------- -------- ----------------------------- -----------------
在上面的示例代码中:
Header
和Payload
是来自djwt
的模块中的类型。- 我们通过向 create 函数提供
header
,payload
和密钥来生成 JWT。 create
函数将使用HS256
签名算法来生成 JWT,其中header
和payload
将组合并用于生成签名。- 最后,我们打印生成的 JWT。
我们可以使用任何喜欢的密钥,只需确保环境变量加载正确即可。有了生成的 JWT,我们可以像在实际 web 应用程序中一样将其用于 HTTP 请求。
如何验证 JWT
现在我们已经学会了如何生成 JWT,现在我们要通过验证 JWT 来确保其有效性。在实际应用程序中,JWT 验证是一种极其重要的安全措施,因此它必须被视为 Web 开发的基本安全控件之一,并严格实施。
要验证 JWT,我们将使用 Deno JWT 中的 verify()
函数,如下所示:
const inputJWT = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJpc3MiOiAidXNlciIsICJleHAiOiAxNjA3MDI3MjAwfQ.QZP7oUeGl6d1QJ3bN-Kh9qW-MBcNk-2CVCYwDU8Jf0I"; const verifiedJwt = await verify(inputJWT, Deno.env.get("JWT_SECRET")!, { alg: "HS256", }); console.log(verifiedJwt);
在上述代码块中,我们使用 Deno JWT 中的 verify
函数验证 JWT。 它需要 JWT、密钥和我们期望使用的算法。
如果 JWT 正确签名的话,我们将获得一个有效的 JSON 对象并将其打印输出以进行测试。
如何解码 JWT
我们还可以使用 Deno JWT 中的 decode()
函数轻松地解码 JWT,如下所示:
const inputJWT = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJpc3MiOiAidXNlciIsICJleHAiOiAxNjA3MDI3MjAwfQ.QZP7oUeGl6d1QJ3bN-Kh9qW-MBcNk-2CVCYwDU8Jf0I"; const decodedJwt = decode(inputJWT); console.log(decodedJwt);
decode()
函数返回一个包含 JWT 数据的对象。我们可以随时读取其中的属性以进行测试。
结论
在本文中,我们了解了如何在 Deno 中使用 JSON Web Token(JWT)生成、验证和解码 JWT。我们使用 Deno JWT 进行了所有这些操作。 希望这篇文章能帮助你了解如何在 Deno 应用程序中使用 JWT 来保护 web API。 在真正的 web 应用程序中,JWT 验证是一项极其重要的安全措施,因此务必小心并严格实施它,以确保您的应用程序安全。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6720b1712e7021665e0380b6