如何在 GraphQL 中使用 Json Web Tokens(JWT) 进行身份验证

阅读时长 4 分钟读完

什么是 Json Web Tokens(JWT)?

Json Web Tokens (JWT) 是一种认证令牌的标准。它使用 JSON 构造一个安全、紧凑的令牌,用于验证用户的身份、授权和信息传递。JWT 是无状态的,这意味着它不需要在服务器上存储任何会话信息,所以它非常适合在分布式系统和移动应用中使用。

一个 JWT 包含三个部分:头部、载荷和签名。头部包含令牌类型和签名算法,载荷包含所有有关用户和他们的授权信息的数据,签名用于验证令牌的完整性。

如何在 GraphQL 中使用 JWT 进行身份验证?

当您构建一个 GraphQL API,安全性是非常重要的。对于一些敏感的操作,我们不希望未授权的用户进行访问。因此,API 需要一种方法来验证哪些用户是被允许的。JWT 是一种非常流行的解决方案,它可以帮助您实现身份验证。

在 GraphQL 中,使用 JWT 进行身份验证分为两个步骤:生成 JWT 和在 GraphQL 查询中验证 JWT。

1. 生成 JWT

当用户进行登录操作时,您需要在服务器上为他生成一个 JWT。您可以使用任何您喜欢的 JWT 库,这里我们以 jsonwebtoken 库为例。

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

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

-- -- --- ----
------ - ----- --
展开代码

在此代码中,我们使用 jwt.sign 函数生成一个 JWT。我们将用户 ID 和角色作为 JWT 的 payload,并添加了一个过期时间,以确保 JWT 会在一段时间后过期。然后,我们将 JWT 返回给客户端。

2. 在 GraphQL 查询中验证 JWT

一旦用户获取了 JWT,在每个 GraphQL 查询中将 JWT 作为请求头发送给服务器。服务器可以检查请求头中的 JWT 是否有效,以判断用户是否已被授权访问该查询。

让我们看一下如何验证 JWT:

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

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

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

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

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

-- -- --- --------
------ --------------
展开代码

在此代码中,我们定义了一个名为 decodeJWT 的函数,用于验证请求头中包含的 JWT 是否有效。如果 JWT 有效,则返回其 payload。如果无效,则返回 null

在我们的 GraphQL 查询中,我们首先调用 decodeJWT 函数来检查 JWT 是否有效。如果JWT无效,则返回错误。如果JWT有效,则执行查询并返回查询结果。

结论

使用 JWT 进行身份验证是一种非常流行和安全的方案,它可以帮助您保护 GraphQL API 中敏感的操作。通过生成 JWT 并在每个 GraphQL 查询中进行验证,您可以确保只有授权用户才能访问您的 API。

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

纠错
反馈

纠错反馈