使用时间戳的API身份验证:客户端的时间设置更改后该怎么办?

时间:2013-10-17 15:50:01

标签: api security rest authentication

我正在实施REST API身份验证系统。

我基本上使用本网站解释的方法:

http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/

基本上它使用请求体来创建哈希,将其与实际请求一起发送到服务器,服务器重新创建并比较它,以及什么不是......

我不打算详细解释。重要的是我正在使用时间戳以防止“重播攻击”。

从网站上引用,它解释道:

  

将当前服务器的时间戳与客户端发送的时间戳进行比较。确保两个时间戳之间的差异在可接受的时间限制内(可能是5-15分钟),以阻止重播攻击。

我现在面临的问题是如果客户端的时钟设置被修改,可能会导致意外的API身份验证失败,因为时间戳因客户端和服务器而异

有没有办法解决这个问题?我是否必须放弃使用时间戳?

如果有人能帮我解决这个时间戳问题,或者我可以阻止重播攻击的任何其他方式,我将非常感激。

注意:我知道向客户端发布一个nonce是一种防止“重放攻击”的好方法,但我想把它作为我的最后手段,因为创建一个实现成本nonce-issuing-API和管理nonce的后端太大了。

3 个答案:

答案 0 :(得分:2)

将服务器的时间戳与客户端发送的时间戳进行比较时,它不必是客户端时间戳,而是服务器发送给客户端的前一个时间戳。 你永远不能依赖客户自己的时间戳,因为它可能是任何东西,或者它可能在世界的另一端。

当客户端第一次连接到服务器时,服务器可以自己回复时间戳并存储在客户端上,下次客户端必须发送最后一个时间戳。

答案 1 :(得分:0)

我认为您希望时间戳为UTC时间,因为更新的文章表明了这一点。

答案 2 :(得分:0)