npm 包 @gitterhq/passport-oauth2 使用教程

阅读时长 9 分钟读完

前言

在现今多样化的 Web 开发环境下,用户认证和授权变得越来越重要。为了方便开发者在 Node.js 应用中实现认证和授权,社区涌现出了大量的认证和授权库。

@gitterhq/passport-oauth2 是一个基于 Passport 的 OAuth2 认证库,可以帮助开发者简单且自由地实现 OAuth2 认证协议。本文将介绍如何使用该 npm 包进行认证。

安装

首先,安装下面这些依赖:

  • passport 用于用户验证
  • @gitterhq/passport-oauth2 是我们要使用的 npm 包
  • express-session 确保 Node.js 应用支持会话数据(session data)
  • cookie-parserexpress 用于管理会话 Cookies 和解析 HTTP 请求

注册应用

在让用户使用第三方账户进行认证前,开发者必须注册认证应用。这个过程需要开发者提供一些信息,包括应用名称、描述、应用图标等等。

要注册一个 Gitter OAuth2 应用,请移步 Gitter Developer Dashboard,并选择 "Create New Application"。在填写必要信息后,记得保存应用的 client_idclient_secret,因为它们会在之后的开发过程中用到。

创建路由和认证中间件

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

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

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

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

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

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

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

认证过程

现在让我们来深入学习一下 OAuth2 认证协议,更好地理解代码实现过程。

OAuth2 有 4 个角色:

  1. Resource Owner:资源的拥有者,即用户。
  2. Client:客户端,即开发者的应用。
  3. Authorization Server:认证服务器,用于给用户提供授权。
  4. Resource Server:资源服务器,存储了用户分享的数据。当一个应用程序请求访问用户数据时,会从这个服务器上获取数据并将其返回给应用端。

OAuth2 认证协议主要通过如下几个步骤来实现:

  1. 用户访问 Client,Client 发现用户未得到认证,于是将用户重定向到 Authorization Server(AS)。
  2. 用户向 AS 提供身份信息,AS 核对身份,如果验证通过,在授权页面上向用户提供同意或拒绝的选项。
  3. 用户同意授权。
  4. AS 向 Client 返回一个授权码(Authorization Code)。
  5. Client 向 AS 提供授权码,并要求换取 Access Token。
  6. AS 确认授权码,小心翼翼地将 Access Token 授权给客户端。
  7. Client 使用 Access Token 向 Resource Server(RS)发送请求。
  8. RS 确认 Access Token,如果验证通过,返回数据给 Client。

我们现在已经完成了路由和认证中间件的开发,那么什么时候使用它呢?也就是什么时候用户需要进行认证?

/login/auth 是一个 GET 请求路由,当用户从客户端向该路由发起请求时,客户端将用户重定向到认证服务器 AS 的登录认证页面。在认证成功后,AS 会将用户重定向到 /login/auth/callback 路由,用户完成授权,并获取到 Access Token。

在我们这个例子中,成功认证后,Access Token 将存在返回的 request 对象中,request.session 对象中也存储了当前的认证状态,开发者可以在整个会话过程中,检查是否存在认证会话。这意味着我们不必在每个请求路由中都进行身份验证,并且可以在任何时候访问用户的身份数据。

示例代码

在下面这个示例中,我们假设用户每次进入页面前,需要执行身份验证。请注意,如果用户没有通过有效认证,将被重定向到 Gitter 的认证服务器。

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

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

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

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

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

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

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

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

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

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

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

总结

在这篇文章中,我们详细了解了如何使用 @gitterhq/passport-oauth2 库进行 OAuth2 认证授权,也学习了一些 OAuth2 认证协议的相关内容。希望这篇文章对您的前端开发有帮助!

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