【问题标题】:How to protect query node(id : ID!) in Relay?如何保护中继中的查询节点(id:ID!)?
【发布时间】:2019-12-30 01:20:51
【问题描述】:

我是 Relay 和 GraphQL 的新手,无法找到答案。如果我必须为实现 Node 接口(根据 Relay 规范)的每个对象提供唯一 ID,那么如何保护数据不泄露。是什么阻止了拥有此类 ID 的人获取他应该无法获取的数据。

客户端:React + Relay
服务器:MongoDB + Prisma + GraphQL-Yoga

假设我们有

type PrivateStuff implements Node {
  id : ID!
  secretData : String!
}

如果有人暴力破解这个 id 或从用户那里窃取它怎么办

query{
  node(id : "PrivateStuffId") {
    id
    secretData
  }
}

有什么方法可以保护这些数据?

更新:可以通过编码id 来提高安全性,然后再将其提供给客户端并根据请求进行解码。但如果编码的 id 泄露,它不会保护数据

更新:在正文中带有 id 的 JWT 可能是一个选项。但是很难确定令牌应该存在多长时间。

【问题讨论】:

  • 您有身份验证系统吗?任何人都可以查询您的 GraphQL API 吗?
  • 我有基于 JWT 的简单身份验证系统。 API 使用 CORS,所以我想任何人都可以查询它。
  • 好吧,如果你有JWT认证系统,那么没有认证的人即使有id也拿不到数据。对吗?
  • 刚刚意识到我可以使用中继中的网络层通过身份验证标头提供令牌,而不是作为查询中的参数。感谢您的帮助!

标签: reactjs security graphql relay


【解决方案1】:

无意中发现了这个tutorial。长话短说,客户端在标头中提供身份验证信息,服务器使用中间件来处理这些数据。请求头可以通过context.request访问。

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多