【发布时间】: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