我们目前正在为客户开发一个全球内容/电子商务平台。
该网站在 Next.js 上运行,并有一个 Apollo 服务器作为 API 网关,与同一服务器上的 Next.js 集成运行。
我有一些关于安全的问题,因为我们的团队中没有任何安全专家可以为我们澄清我们的需求。
因此,我们需要通过 Next.js BFF 代理请求,这发生在 REST 上。例如 客户端 <-- REST --> BFF <-- GraphQL --> Apollo 服务器。
我不喜欢我们不能使用客户端的 GraphQL 直接与 Apollo 服务器对话。另一方面,它似乎引入了一整层复杂性来向公共互联网开放 Apollo 服务器,但我认为它可以配置为阻止任何不包含有效 CSRF cookie + 标头的请求。
您对此有何看法?使用 REST 与 BFF 通信是否会抛弃 GraphQL 的优势?我们是否应该向互联网开放 Apollo Server 并允许前端直接与其对话?我们可以完全省略 BFF REST API 吗?
我们目前的方法有意义吗?
您可以简单地将 csrf 令牌添加到发送到 Apollo Server 的请求标头,然后拒绝任何未通过检查的请求。接下来不添加 Apollo 无法直接提供的任何特定安全优势。
此检查需要在您在服务器上定义的 context 函数中进行。如果 csrf 令牌丢失或无效,该函数可能会抛出 401。