什么是 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