我正在实现一个 REST API 身份验证系统。
我基本上使用本网站中解释的方法:
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
基本上它使用请求主体来创建一个哈希,将它与实际请求一起发送到服务器,服务器重新创建并比较它,以及什么不是......
我不会费心解释细节。重要的部分是我使用时间戳来防止“重放攻击”。
从该网站引述,它解释说:
将当前服务器的时间戳与客户端发送的时间戳进行比较。确保两个时间戳之间的差异在可接受的时间限制内(可能是 5-15 分钟)以阻止重放攻击。
我现在面临的问题是,如果客户端的时钟设置被修改,可能会导致意外的 API 身份验证失败,因为客户端和服务器之间的时间戳不同。
有没有办法解决这个问题?我必须放弃使用时间戳吗?
如果有人能帮助我解决这个时间戳问题,或者用任何其他可以防止重放攻击的方法,我将不胜感激。
注意:我知道向客户端发出 nonce 是防止“重放攻击”的好方法,但我想把它作为最后的手段,因为创建 nonce-issueing-API 和后端管理的实施成本随机数太大。