如何通过 Node.js 和 Express.js 使用 OAuth 2.0?

阅读时长 6 分钟读完

OAuth 2.0 是一种用于授权的开放标准,它允许用户授权第三方应用程序访问他们在其他服务提供的资源上的数据,而不必共享他们的凭据或密码。它被广泛使用,包括 Google、Facebook、Twitter 等大型服务。

这篇文章将介绍如何在 Node.js 和 Express.js 中使用 OAuth 2.0,包括如何配置认证信息、访问 OAuth 2.0 授权服务器和使用 access token 访问受保护的资源服务器。

配置认证信息

在使用 OAuth 2.0 之前,您需要注册一个 OAuth 应用程序,并获得以下信息:

  • client ID
  • client secret
  • 授权终端地址
  • token 终端地址
  • 范围

client ID 和 client secret 是提供给您的 OAuth 应用程序的唯一标识符和秘密。它们通常与授权终端地址和 token 终端地址一起提供,后者是用于获取 access token 的地址。

范围是指可以访问的资源类型,例如用户资料、邮件、日历等。通过授权终端,应用程序会请求针对某些范围进行授权,因此在注册 OAuth 应用程序时需要明确指定这些范围。

访问 OAuth 2.0 授权服务器

在 Node.js 中,您可以使用 npm 安装许多用于 OAuth 2.0 的库,包括 passportoauthoauth2orizerequest。在本文中,我们将使用 passport 库将 OAuth 2.0 集成到我们的应用程序中。

首先,您需要安装 passportpassport-oauth2

接下来,您需要创建一个新的 Passport 实例并配置 OAuth 2.0 策略。例如,如果您想使用 Google 的 OAuth 2.0 API:

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

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

以上代码将创建一个名为 google 的新策略,并在用户成功授权时将 access tokenrefresh token 传递给回调函数。

在您的应用程序中,您需要添加以下路由来将用户重定向到授权终端:

此路由将重定向用户到 Google OAuth 2.0 的授权页面,并请求访问 https://www.googleapis.com/auth/plus.login 范围。

当授权成功时,用户将被重定向回您的应用程序,并在路由 /auth/callback 上获得一个包含access tokenrefresh token 的令牌。对于 google 策略,您可以像这样添加回调路由:

如果验证成功,用户将被重定向到 /profile 路由,否则将被重定向回根路由 /

访问受保护的资源服务器

发出 OAuth 2.0 请求后,您可以使用 access token 来访问您的 OAuth 2.0 API。例如,如果您想访问 Google OAuth 2.0 API 的用户资料:

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

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

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

以上代码将从 https://www.googleapis.com/plus/v1/people/me/ 目标地址获得用户资料,并将用户资料呈现到 profile 视图中。

在请求中,您需要在 Authorization 标头中传递 Bearer 令牌前缀和 access token 的值。如果成功,您将从 API 获得带有 access token 的响应。

总结

在本文中,我们介绍了如何在 Node.js 和 Express.js 中使用 OAuth 2.0。我们涵盖了如何配置认证信息、访问 OAuth 2.0 授权服务器和使用 access token 访问受保护的资源服务器。我们还提供了示例代码,以帮助您更好地理解这些概念,并在您的应用程序中实现 OAuth 2.0。

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

纠错
反馈