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

前言

随着现代应用程序的需求,身份认证已成为很普遍的应用功能。JSON Web Tokens (JWT) 已成为一种流行且安全的 token 格式,他可以用作用户认证和授权。在 GraphQL 中,使用 JWT 进行身份认证非常普遍且方便。

本文将介绍如何在 GraphQL 中使用 JWT 进行身份认证,同时提供相关示例代码。

JWT 简介

JWT 由三个部分组成:header、payload 和 signature。header 包含算法和类型信息,例如:

payload 包含标准声明和自定义声明,例如:

signature 由 header 和 payload 基于私钥生成,例如:

通常情况下,JWT 会存储在客户端的 localStorage 或 sessionStorage 中,用于身份认证和授权。

使用 GraphQL 进行身份认证

在 GraphQL 中,可以使用 HTTP 消息头中的 Authorization 字段来发送 JWT token。通常,把这个 token 添加到请求头中,对于所有 GraphQL 操作,可以在服务端中校验该 token。

服务端实现

在服务端,可以使用任何编程语言和库来校验 JWT。以下是使用 Node.js 的例子:

verifyJWT 函数接受一个 token 参数,并尝试解密 JWT。如果解密成功,就返回 payload。否则,将抛出一个自定义错误。

客户端实现

在客户端,可以使用任何 GraphQL 客户端库来发送 JWT。以下是使用 Apollo Client 的例子:

其中,authLink 是一个自定义 Apollo Link,用于在请求头中添加 Authorization 字段。在构造 authLink 时,可以从 localStorage 中读取 JWT token。在调用 authLink 时,请求头将被自动添加。

在 GraphQL 中校验 JWT

在服务端实现 JWT 校验后,可以将其集成到 GraphQL 解析器中。以下是使用 Apollo Server 的例子:

context 函数将从 HTTP 请求中提取 JWT token,通过调用 verifyJWT 函数进行 token 校验,将该用户数据注入到 GraphQL 解析器中。

总结

在 GraphQL 中使用 JWT 进行身份认证已成为一个常见的功能需求。通过阅读本文和相关示例代码,读者可以了解如何在 GraphQL 中使用 JWT 进行身份认证,并如何在服务端和客户端实现该功能。

希望本文对读者学习和开发 GraphQL 应用有所帮助。

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


纠错
反馈