在朋友请求后给出数字签名以用于在社交应用程序中证明友谊?

Give a digital signature after friend request to use after to prove friendship in social apps?

我正在构建某种具有 'friends' 概念的社交应用程序,朋友可以在其中对他们的一个或多个朋友进行操作, 我不想在每次有人发送任何类型的操作请求时询问数据库是否存在友谊。 我想到的一个想法是,在友谊获得批准后,将向每个用户发送一个数字签名,每个用户都可以在服务器中检查每个请求的成本,这应该比询问数据库成本更低。 然后我可以每天左右更改异步密钥并强制用户要求新的数字签名,在这种情况下我会接近数据库来测试友谊(这对安全性有好处,但如果用户想取消友谊也是必须的)。

我想问的是,这是不是个糟糕的主意?也许我没有看到什么。或者只是 link 任何有关此类场景的任何信息都会很棒。

分发数字签名的想法是可以实现的,尽管我不确定它是否真的比查询数据库更快,因为数据库本来就是非常快的。

让我们继续认为这确实是个好主意。您将需要某种令牌,其中包含有关谁是您的朋友的信息,并且必须由服务器验证。对我来说,这似乎是您可以使用 JSON Webtoken (JWT) 的东西。

Here is the basics on JWTs.

JWT 由三部分组成:Header、负载和签名。 header 定义令牌的有效期,有效负载可以包含好友列表(或好友 ID)。签名是整个事物的散列,用服务器的私钥签名,从而验证服务器已批准此令牌在时间 X 之前有效。整个事物在发送之前被编码。

然后您将在某种 HTTP header 中发送 JWT,可能是 Authorization header。然后服务器可以快速解码 JWT(有很多语言的库,JWT 是一个很好的标准),因此不需要查询数据库。不过,确实需要发送 JWT 的大小,因此我不确定您是否真的会因此获得任何速度。