最近,随着 JavaScript 运行时的多样化,Deno 成为了前端语言的又一重要选择。对于 Web 应用,身份认证永远是关键的一环。本文将讲解如何在 Deno 中实现 JWT 身份认证,帮助读者深入了解这个常用而重要的认证方式。
JWT 简介
JWT(JSON Web Token)是由 JSON 标准定义的一种 token 格式。在计算机网络中间传递信息,以及在基于 token 的身份验证方案中作为 token 使用。JWT 通常由三部分组成,使用点号(.)分隔:
- Header:JWT 的头部,通常包含两部分:令牌类型(即 JWT)以及所使用的算法,例如
{"alg": "HS256","typ": "jwt"}
。 - Payload:实际需要传输的数据部分,JWT 标准并没有规定数据的具体格式,但它确保这些数据不被篡改。同时,JWT 支持使用自定义的声明来添加要传输的信息。
- Signature:签名部分主要是对前两部分进行哈希并加盐,加密方式可自行定义。
使用 JWT 身份认证的步骤如下:
- 用户使用用户名和密码进行登录。
- 登录成功后,服务器会返回一个 JWT。
- 客户端开始存储该令牌,并将其发送在每个请求的请求头或 cookie 中。该请求将与服务器进行验证,以确保该请求合法。
Deno 环境搭建
在使用 Deno 进行开发时,需要安装 Deno 运行时环境。安装非常简单,只需在终端输入以下命令即可:
curl -fsSL https://deno.land/x/install/install.sh | sh
安装完成后,您可以输入 deno --version
验证是否安装成功。
安装相关依赖
为了实现 JWT 身份认证,你可以通过使用 deno-jwt 这个第三方库来实现。使用 import
命令即可从 Deno.land/x 导入该库。
import { validateJwt, parseAndDecode } from "https://deno.land/x/djwt/validate.ts"; import { makeJwt, setExpiration } from "https://deno.land/x/djwt/create.ts";
实现 JWT 身份认证
使用 deno-jwt 库,我们可以轻松地实现 JWT 身份验证。以一个实际示例为例,这个示例编写了一个 login()
函数和一个使用 JWT 进行身份验证的 authorized()
函数。
-- -------------------- ---- ------- ------ - ------------ -------------- - ---- --------------------------------------- ------ - -------- ------------- - ---- ------------------------------------- ----- --- - ------------------------- ----- --------- - -------- ----- ------ - ----- ---------- ---- ------- --------- ---- - --------- ------- --------- ------- ----- ------- - ----- ------ ------ - - - --------- -------- --------- ------- ----- ------- -- -- -------- --------------- ------- --------- ------- - ----- ---- - -------------- -- ---------- --- -------- -- ---------- --- ---------- -- ----- --- ---------- - -------------------- -------- ------ ----- - ----- ------- - - --------- -------------- ----- ---------- ---- ----------------- ---------------- - ------ -- ------ --------- ------- -------- --- --- - -------- ----------------- ------- - --- - ----- --------- - ---------------------- -- ------------------ --- ----- - ----------------- ----------- - ----- ------- - ------------------ ----- ------ - ------------------ ---- - ----------- ----------- --- -- ---------------- - -------------------------- ---------- ---------------------------- - ---- - -------------------------- ---------- - - ----- --- - --------------- - - ----- --- - -------------- -------- ----------------
这个示例中,login()
函数接收用户名和密码,并验证是否与用户列表中的某个用户匹配。如果成功登录,则返回生成的 JWT。JWT 的 payload 包含了用户名、角色和过期时间。
authorized()
函数接收 JWT,验证其有效性并输出一条消息。
总结
本文详细阐述了如何使用 Deno 实现 JWT 身份验证,并提供了一个实际示例,该示例演示了从用户登录到使用 JWT 进行身份验证所需的步骤,并详细讲解了 deno-jwt 库的用法。希望本文可以对读者对 Deno 和 JWT 的认识有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65016df995b1f8cacdf265a3