如何在 Deno 中构建 OAuth2 服务器?

阅读时长 9 分钟读完

OAuth2 是一种广泛使用的协议,它提供了一种安全的方法,允许应用程序使用用户的授权访问他们的数据。在本文中,我们将学习如何使用 Deno 构建 OAuth2 服务器。

什么是 OAuth2?

OAuth2 是一种开放标准的授权协议,旨在允许第三方应用程序代表用户访问受保护的资源。它允许用户授权第三方应用程序,而无需与他们共享他们的凭据。

OAuth2 首先将用户重定向到 ID 提供程序,以获得授权。如果用户批准了请求,ID 提供程序将生成一个授权码。然后,该授权码将发送回请求的应用程序。应用程序接下来将使用该授权码向 ID 提供程序发出请求以获取访问令牌。最后,访问令牌将用于访问受保护的资源。

在 Deno 中创建 OAuth2 服务器

现在,让我们看看如何使用 Deno 创建一个 OAuth2 服务器。我们将使用 Oak HTTP 框架和 JWT 库。

首先,我们需要安装 Oak 和 jwt 来设置我们的构建环境。为此,我们可以使用以下命令:

然后,我们需要创建一个中间件来处理 OAuth2 请求。我们将创建一个名为 OAuth2Middlaware 的类,该类将处理授权和访问令牌的交换。这个类将需要包含以下函数:

  • authorize() - 处理授权请求。
  • token() - 处理访问令牌请求。

以下是我们的 OAuth2Middlaware 类的示例代码:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

现在,我们需要将这个中间件添加到我们的应用程序中。为此,我们将创建我们的应用程序,并使用以下代码将中间件添加到该应用程序:

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

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

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

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

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

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

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

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

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

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

然后,我们需要创建一个 EJS 模板,在该模板中显示授权页面。我们将使用以下代码创建一个名为 authorize.ejs 的文件:

最后,我们需要实现回调路由,这是 ID 提供程序将向其发送授权码的地方。我们将使用以下代码来创建回调路由:

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

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

这是我们需要编写的所有代码,现在我们可以运行应用程序并测试它。在浏览器中导航至以下 URL:http://localhost:8000/authorize?client_id=client_id&redirect_uri=http://localhost:8000/callback。将看到授权页面,点击“授权”按钮后,将重定向到回调 URL 并返回访问令牌。

结论

在本文中,我们学习了如何使用 Deno 构建 OAuth2 服务器。我们创建了一个 OAuth2Middleware 类,该类包含了我们需要处理授权和访问令牌的逻辑。我们还学会了使用 Deno 中的 Oak 和 JWT 库来实现它。相信本文对于掌握如何在 Deno 中构建 OAuth2 服务器,对于对于前端工程师来说,有指导意义。

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

纠错
反馈