如何在 Apollo-Server 中使用 CSRF 令牌?

问题描述 投票:0回答:1

我们目前正在为客户开发一个全球内容/电子商务平台。

该网站在 Next.js 上运行,并有一个 Apollo 服务器作为 API 网关,与同一服务器上的 Next.js 集成运行。

我有一些关于安全的问题,因为我们的团队中没有任何安全专家可以为我们澄清我们的需求。

  1. 为了保护 Apollo 服务器的安全,它仅绑定到本地主机,并且只允许服务器-服务器请求,并通过共享密钥进行保护。
  2. 为了防止大多数来自前端以外的客户端发出的请求,我们使用 CSRF 令牌来保护我们的 BFF API,该令牌需要出现在 cookie 和请求标头中。

因此,我们需要通过 Next.js BFF 代理请求,这发生在 REST 上。例如 客户端 <-- REST --> BFF <-- GraphQL --> Apollo 服务器

我不喜欢我们不能使用客户端的 GraphQL 直接与 Apollo 服务器对话。另一方面,它似乎引入了一整层复杂性来向公共互联网开放 Apollo 服务器,但我认为它可以配置为阻止任何不包含有效 CSRF cookie + 标头的请求。

您对此有何看法?使用 REST 与 BFF 通信是否会抛弃 GraphQL 的优势?我们是否应该向互联网开放 Apollo Server 并允许前端直接与其对话?我们可以完全省略 BFF REST API 吗?

我们目前的方法有意义吗?

security next.js graphql architecture owasp
1个回答
0
投票

您可以简单地将 csrf 令牌添加到发送到 Apollo Server 的请求标头,然后拒绝任何未通过检查的请求。接下来不添加 Apollo 无法直接提供的任何特定安全优势。

此检查需要在您在服务器上定义的 context 函数中进行。如果 csrf 令牌丢失或无效,该函数可能会抛出 401。

© www.soinside.com 2019 - 2024. All rights reserved.