6

我正在实现一个 REST API 身份验证系统。

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

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

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

我不会费心解释细节。重要的部分是我使用时间戳来防止“重放攻击”。

从该网站引述,它解释说:

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

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

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

如果有人能帮助我解决这个时间戳问题,或者用任何其他可以防止重放攻击的方法,我将不胜感激。

注意:我知道向客户端发出 nonce 是防止“重放攻击”的好方法,但我想把它作为最后的手段,因为创建 nonce-issueing-API 和后端管理的实施成本随机数太大。

4

3 回答 3

2

当比较服务器的时间戳和客户端发送的时间戳时,它不一定是客户端时间戳,而是服务器发送给客户端的先前时间戳。您永远不能依赖客户自己的时间戳,因为它可能是任何东西,也可能在世界的另一端。

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

于 2013-10-17T16:43:39.823 回答
1

我认为您希望您的时间戳是更新后的文章所示的 UTC 时间。

于 2013-10-17T16:51:26.420 回答
0
于 2013-10-17T19:06:44.347 回答