如何使用 Node.js 实现 OAuth2.0 授权认证?

阅读时长 6 分钟读完

什么是 OAuth2.0?

OAuth2.0 是一种用于授权的开放标准。它允许用户授权第三方应用程序访问他们的资源。OAuth2.0 中有四种角色:客户端、资源拥有者、授权服务器和资源服务器。客户端是请求访问资源的应用程序,资源拥有者是拥有被访问资源的用户,授权服务器负责验证用户身份并发放访问令牌(Access Token),而资源服务器则根据 Access Token 来决定是否允许客户端访问资源。

如何使用 Node.js 实现 OAuth2.0?

下面我们将演示如何使用 Node.js 实现 OAuth2.0 的授权认证功能,包括获取 Access Token 和使用 Access Token 访问受保护的 API。

步骤一:注册应用程序

在开始之前,你需要先在你所要使用的第三方服务上注册你的应用程序,并获取相应的客户端 ID 和客户端秘钥。这里我们以 GitHub 为例,你可以打开 GitHub Developers 注册一个新的 OAuth 应用程序,得到客户端 ID 和客户端秘钥。

步骤二:安装依赖

我们可以使用 npm 安装 requestmorgan 这两个库:

其中,request 库用于向 GitHub 发起 HTTP 请求,morgan 库用于记录应用程序的 HTTP 请求日志。

步骤三:实现授权认证

下面看一下授权的实现。

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

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

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

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

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

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

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

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

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

在上面的代码中,我们定义了两个路由:/auth/github/auth/github/callback。当用户访问 /auth/github 时,我们将用户重定向到 GitHub 授权页面;当用户授权后,GitHub 将返回一个授权码(authorization code)并重定向到我们指定的 redirect_uri,在我们的例子中为 /auth/github/callback。在 /auth/github/callback 路由中,我们使用 request 库向 GitHub 发起请求以获得 Access Token。注意,我们在此处向 GitHub 服务器发送的是一种 POST 请求。

步骤四:使用 Access Token 访问未经授权的资源

为了检验 Access Token 是否有效,我们还需要一个未经授权的资源。我们可以使用 GitHub 的 Users API。在 /user 路由中,我们将向 GitHub 发起一个 GET 请求,该请求需要带上有效的 Access Token。如果 Access Token 验证成功,则会返回当前用户的信息。

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

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

在这个路由内,我们从请求的查询参数中获取 access_token,然后将其发送到 GitHub 的 Users API。如果 API 响应成功,则返回用户信息。

总结

我们已经演示了如何使用 Node.js 和 request 库实现 OAuth2.0 的授权认证功能。通过这个例子,读者将学到:

  • 如何注册 OAuth 应用程序;
  • 如何使用 Node.js 和 request 库向认证服务器请求 Access Token;
  • 如何使用 Access Token 访问保护资源。

希望这篇文章对你有所指导和帮助。

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

纠错
反馈