我有一个 Web 服务,我提供给用户使用我的应用程序数据库并获取一些信息。用户必须注册 API key 并在提出请求时提供该 key 。一切正常,但我如何检查注册 key 的用户是否真正提出请求,而不是他可能已将 key 提供给的其他人?
过去两天我一直在考虑想出一个解决方案,但到目前为止还没有。
最佳答案
您需要使用签名的请求。基本上它是这样工作的:
为避免重放攻击,您还可以在混合中添加随机数和时间戳。 nonce 只是一个数字,必须由客户端在每次请求时递增。当您收到请求时,您会检查您之前是否已经收到过此随机数/时间戳。如果您这样做了,您将拒绝该请求(因为这很可能是重放攻击)。如果没有,您将随机数/时间戳存储在您的数据库中,以便您以后可以查找它。
这或多或少是在 OAuth 中签署请求的方式。在链接中查看他们的示例。