如何在 Deno 中使用 JWT 进行身份验证

JWT (JSON Web Token) 是一种用于身份验证的开放标准,它可以安全地在客户端和服务器之间传递信息,而无需在每个请求时都进行身份验证。Deno 是一个现代的 JavaScript 和 TypeScript 运行时环境,本篇文章将介绍如何在 Deno 中使用 JWT 进行身份验证。

安装依赖

首先,我们需要安装 Deno 以及一个用于生成和验证 JWT 的库,我们可以选择 deno-jwt

安装 Deno:

- ---- ----- -------------------------------------- - --

安装 deno-jwt:

- ---- ------- ------------ ------------- ----------- ----------- -------------------------------

生成 JWT

在 Deno 中生成 JWT 很简单,我们只需要使用 deno-jwt 库中的 sign 函数即可。

------ - ---- - ---- ----------------------------------

----- ------- - - --- -- --------- --------- --
----- ------ - ----------------
----- ------ - - ---- -------- ---- ----- --

----- ----- - ----- ------ -------- ------- ------ ---
------------------- -- --------------------------------------------------------------------------------------------------------------------------------

上面的代码中,payload 是要包含在 JWT 中的数据,在这个例子中我们设置了 idusernamesecret 是用于生成签名的密钥,header 是 JWT 的头部,包含算法和类型。

生成的 JWT 是一个由三部分组成的字符串,它们分别是头部、载荷和签名,用英文句点 . 分隔。在上面的例子中,生成的 JWT 中的载荷部分是:

-
  ----- --
  ----------- ---------
-

验证 JWT

接下来,我们需要编写代码来验证 JWT。我们可以使用 deno-jwt 中的 verify 函数来验证 token。

------ - ------ - ---- ----------------------------------

----- ----- - ------ -- ----- -----

----- ------ - ----------------
----- ----- - ----- ------------- ------- ---------

-- ------- -
  -- ----- ----
  --------------------------- -- - --- -- --------- --------- -
- ---- -
  -- ----- ----
  -------------------- --------
-

在验证 JWT 时,我们需要提供相同的密钥和算法。如果 JWT 是有效的,则验证函数将返回一个对象,其中包含头部和载荷。否则,它将返回一个 null 值。

完整示例

为了让这个示例更完整,我们可以编写一个基本的身份验证系统。

------ - ------------ ------ - ---- ---------------------------------
------ - ------ - ---- ----------------------------------

---- ---- - -
  --- -------
  --------- -------
  --------- -------
--

----- ------ ------ - -
  -
    --- --
    --------- --------
    --------- -----------
  --
--

----- ------ - ----------------

----- ------ - --- ---------

--------------------- ----- ----- -- -
  ----- - --------- -------- - - ----- -------------------------

  ----- ----- ---- - --------- - -----------
    --- -- ---------- --- -------- -- ---------- --- --------
  --

  -- ------- -
    ------------------- - ----
    ----------------- - - -------- -------- ------------ --
    -------
  -

  ----- ------- - - --- -------- --------- ------------- --
  ----- ----- - ----- ------ -------- ------- ------- - ---- -------- ---- ----- - ---

  ----------------- - - ----- --
---

------------------------ ----- ----- -- -
  ----- ----- - ------------------------------------------------- ------

  -- -------- -
    ------------------- - ----
    ----------------- - - -------- -------- ------ --
    -------
  -

  ----- ----- - ----- ------------- ------- ---------

  -- -------- -
    ------------------- - ----
    ----------------- - - -------- -------- ------ --
    -------
  -

  ----------------- - - -------- ---- --- -------------- --
---

----- --- - --- --------------
-------------------------
---------------------------------

----- ------------ ----- ---- ---

在这个示例中,我们使用了 Deno 自带的 Web 框架 Oak,使用了 deno-jwt 库中的 verifysign 函数。

我们创建了一个 users 数组,其中包含了一个用户的列表,每个用户有一个 id、一个 username 和一个 password。当用户登录时,我们会检查提供的凭证是否与列表中的任何一条记录匹配,并生成 JWT 并将其返回。

/protected 路由中,我们首先获取用户提交的 Token 并验证它是否有效。如果有效,我们可以让用户访问 /protected 路由,否则我们将返回一个 401 未授权的错误。

结论

在这篇文章中,我们详细介绍了如何使用 deno-jwt 库在 Deno 中生成和验证 JWT。我们还编写了一个基本的身份验证系统作为一个完整的示例。

JWT 是一种非常有用的身份验证方案,它能够在客户端和服务器之间安全地传递信息。我们可以使用 deno-jwt 库来方便地在 Deno 中进行身份验证。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670b7037d91dce0dc88a977f