什么是 GraphQL
GraphQL 是一种由 Facebook 开发的查询语言和运行时环境,用于 API 构建。GraphQL 允许客户端指定需要的数据和数据结构,服务端则返回满足需求的数据。相较传统 RESTful API,GraphQL 更加灵活、高效。
什么是 OAuth2
OAuth2 是一种授权机制,允许第三方应用程序通过无需知道用户凭证即可获取用户数据的方式来限制对受保护资源的访问。
GraphQL 实现 OAuth2
为了在 GraphQL API 中使用 OAuth2,你需要在 GraphQL API 和 OAuth2 认证服务器之间建立信任关系。下面是实现 GraphQL OAuth2 的步骤。
步骤 1:注册应用程序
在 OAuth2 服务器上,你需要注册你的应用程序,以便你获得一个客户端 ID 和一个客户端秘钥,这对 Token 颁发来说是必不可少的。你的服务提供商将引导你完成这个过程。在注册应用程序时,请务必记下客户端 ID 和客户端秘钥。
步骤 2:初始化 OAuth2 服务器
在初始化 OAuth2 服务器时,需要指定 OAuth2 授权流程、客户端 ID 和客户机秘钥。
步骤 3:向 OAuth2 帐户系统添加客户端
在你开始使用 GraphQL API 之前,你需要在 OAuth2 帐户系统中创建一个客户端 ID 和一个客户端秘钥。这将作为认证 API 的一部分,并提供一个用于在 OAuth2 认证授权流程中识别你的 GraphQL 客户端应用程序的 ID。
步骤 4:允许访问 GraphQL API
要允许资源服务器调用 GraphQL API,你必须允许 OAuth2 帐户系统访问 GraphQL API。
步骤 5:获取 OAuth2 客户端 ID 和客户端秘钥
你必须获取客户端 ID 和客户端秘钥,以便在身份验证 API 上进行身份验证。
步骤 6:处理身份验证
使用 GraphQL Schema,在 server 执行 resolver 时,对 GraphQL API 进行身份验证。这将允许你在身份认证 API 上验证请求。
input LoginInput { email: String! password: String! } type Mutation { login(input: LoginInput!): String! }
async function login(_, { input }, { dataSources, res }) { const result = await dataSources.users.login(input); const accessToken = result.access_token; res.cookie('access_token', accessToken, { maxAge: 1000 * 60 * 60 * 24 * 7, httpOnly: true }); return accessToken; }
注意事项
安全
在使用 OAuth2 时,必须做好安全工作,以确保 API 调用一直是安全的。
鉴权
当应用程序尝试访问受保护 API 时,需要先对 API 进行身份验证和授权。GraphQL 将请求和响应中的头信息传递给 resolver。在 resolver 中,你可以检查头中的信息以确定当前请求的用户。
API 文档
为了让开发人员正确调用 GraphQL API,你需要提供 API 文档。API 文档应该指出受保护的端点以及这些端点需要哪些角色。
审计日志
为了跟踪用户的操作,你需要记录 API 请求。这包括谁提交了 API 请求、请求的内容以及何时提交的请求。
结论
虽然 OAuth2 可以保证 API 的安全性,但它并不是万无一失的。开发人员应该注意安全问题,并仔细管理和记录请求。希望这篇文章能给您提供一些 GraphQL 实现 OAuth2 的技巧和注意事项,让您更好地构建安全的 GraphQL API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6700f3ec0bef792019aeaf02