GraphQL 中如何引入 Authentication 和 Authorization?

阅读时长 6 分钟读完

GraphQL 是一种用于 web 应用程序的查询语言,它提供了比传统 RESTful API 更好的查询语法、类型检查和强大的工具。随着 GraphQL 在前端领域的越来越受欢迎,如何在 GraphQL 中引入 Authentication 和 Authorization 就显得尤为重要。

在本文中,我们将讨论如何在 GraphQL 中引入 Authentication 和 Authorization,并阐述其深度学习和指导意义。

什么是 Authentication 和 Authorization?

在探讨如何在 GraphQL 中引入 Authentication 和 Authorization 之前,让我们先了解一下这两个概念的含义。

Authentication(身份验证)涉及用户是否已被确认其身份的问题。它可以是基于用户名和密码的登录,基于 OAuth2 的第三方登录,或者其他的方式。一旦用户被认证,后续的请求就可以使用一个 token 或 cookie 来将身份随请求一起传输,以便服务器可以验证身份。

Authorization(授权)涉及用户访问资源的问题。这可以是对全局范围的授权,也可以是基于具体业务场景的授权。比如,特定的用户或用户组对特定的资源有访问权限,其他用户则没有。授权有助于确保用户只有访问他们有权访问的资源的权限。

如何在 GraphQL 中引入 Authentication?

在 GraphQL 中引入 Authentication 可以帮助我们验证请求是否是准确的用户发送的。我们可以使用像 JWT 这样的 token 或 cookie 来表示用户最初的身份验证过程,并使这些 token 或 cookie 携带我们需要的任何信息。下面是一个示例代码:

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

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

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

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

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

在上面的代码中,我们使用了 jsonwebtoken 来签发和验证 token。在中间件中,我们验证了每个请求的 Authorization header,并在其中解码 token,以便我们在后面的请求处理中获取用户信息。

如何在 GraphQL 中引入 Authorization?

在 GraphQL 中引入 Authorization 可以让我们确保只有被授权的用户才能访问特定的资源。在实践中,我们通常会在 schema 中定义我们的类型和字段的访问级别,并在解析器中为每个操作检查这些级别。下面是一个示例代码:

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

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

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

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

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

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

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

在上面的代码中,我们定义了一个 Book 类型,并添加了两个属性:requiresAuthrequiresRole。这些属性指定了需要身份验证和要求特定的角色才能访问的资源。同时我们使用一个 addBook mutation,其中我们检查当前用户是否已经认证,是否拥有正确的角色。

总结

在本文中,我们学习了如何在 GraphQL 中引入 Authentication 和 Authorization。无论是验证请求是否来自正确的用户,还是授权哪些用户可以访问特定的资源,这些功能在开发 web 应用程序时都很重要。我们希望本文可以帮助您更好地理解 GraphQL 中身份验证和授权的实现,以及如何在实践中应用它们。

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

纠错
反馈