我有一个Web服务,我正在向用户提供进入我的应用程序数据库并获取一些信息.用户必须注册API密钥并在提出请求时提供.一切正常,但我如何检查注册密钥的用户是否实际提出请求而不是他可能已经提供密钥的其他人?
在过去的两天里,我一直在考虑提出一个解决方案,但到目前为止还没有.
您需要使用已签名的请求.基本上它的工作原理如下:
原文链接:https://www.f2er.com/ajax/159943.html>您为用户提供API密钥和“秘密”(随机字符串),只有您和客户知道.
>每当他们提出请求时,他们都会向其添加“签名”参数.这个签名基本上是请求参数的散列,API密钥的其他参数(见下文)的秘密.
>既然你也知道这个秘密,你可以验证签名是否正确.
为了避免重放攻击,您还可以在混合中添加随机数和时间戳. nonce只是一个必须在每个请求上由客户端递增的数字.当您收到请求时,检查您之前是否已收到此nonce / timestamp.如果您这样做,则拒绝该请求(因为它很可能是重播攻击).如果没有,则将nonce / timestamp存储在数据库中,以便稍后查找.