Deno 中实现 REST API 安全认证

阅读时长 10 分钟读完

在开发现代 Web 应用程序时,使用 REST API 已成为标准实践之一。但是,我们需要确保这些 API 访问的是经过授权的用户,而不是恶意攻击者。因此,安全认证在 REST API 开发中扮演着至关重要的角色。在本篇文章中,我们将分享如何在 Deno 应用程序中实现 REST API 安全认证。

什么是 Deno?

Deno 是一种基于 TypeScript 和 V8 引擎的新型运行时环境,它旨在提高 Node.js 的缺点和安全性问题。Deno 由 Node.js 的创始人 Ryan Dahl 致力于开发,它提供了更好的模块化系统、TypeScript 支持、更好的安全性和更高的性能等特性。

实现步骤

我们使用 Deno 来实现 REST API 安全认证。我们需要完成以下任务:

  1. 编写一个简单的 REST API。
  2. 创建用户模型和数据库。
  3. 使用 JSON Web Token(JWT)实现用户认证。
  4. 将 JWT 令牌发送给客户端。
  5. 验证每个 API 请求是否具有正确的 JWT 令牌。

让我们逐步完成这些任务。

编写一个简单的 REST API

下面是一个简单的 REST API 示例,该示例将返回从数据库中获取的所有用户列表。

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

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

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

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

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

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

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

创建用户模型和数据库

我们需要创建用户模型和数据库,以便我们能够在登录之后为每个用户创建 JWT 令牌。在本例中,我们将使用 MySQL 数据库。

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

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

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

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

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

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

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

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

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

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

使用 JWT 实现用户认证

JWT 是一种用于 Web 应用程序中进行用户认证的标准。我们可以使用第三方 JWT 库 jsonwebtoken 实现 JWT 令牌的生成和验证。

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

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

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

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

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

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

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

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

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

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

将 JWT 令牌发送给客户端

我们使用以下代码将 JWT 令牌发送给客户端。

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

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

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

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

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

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

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

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

验证每个 API 请求是否具有正确的 JWT 令牌

我们已经可以为每个用户创建 JWT 令牌并将其发送给客户端。在客户端收到该令牌后,我们需要验证每个 API 请求是否具有正确的 JWT 令牌。

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

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

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

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

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

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

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

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

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

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

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

总结

本文介绍了如何在 Deno 应用程序中实现 REST API 安全认证。我们使用 MySQL 数据库来存储用户信息,使用 bcrypt 加密密码,并使用 JWT 实现用户认证。在每个 API 请求上,我们都验证了 JWT 令牌的有效性,并为受授权的用户提供了访问资源的权限。希望这篇文章对您有所帮助!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c8c2c95ad90b6d04149dc2

纠错
反馈