您可以使用由两部分构成的令牌:一个在客户端和服务器之间共享,另一个基于某个外部参数。 你甚至不必 更新 它。
例如,假设客户端和服务器共享一个名为的数字令牌 t 并且他们在第一次通话期间(登录,用户创建,无论你想要什么)同意该令牌。 当他们创建令牌时,他们也设置了一个计数器 c 至 0 并创造一对夫妇 p = <t, c> 那就是 当前 令牌(或更好,最后见过)。 他们绝不能在任何请求中明确地发送令牌或计数器。
t
c
0
p = <t, c>
当客户端想要向服务器发送消息时,步骤如下:
v = t*c
p
<t,c+1>
v
每个请求都有一个唯一的实际令牌。
要验证服务器上的令牌,步骤如下:
aN
a0 = v*(c-N/2)
c' = (c-N/2)
a1 = v*(c-N/2+1)
aN = v*(c+N/2-1)
aM
c'
这样,可以很好地处理并发请求,并且您不必显式更新令牌。
每当请求失败时,客户端都可以决定重置共享令牌 t 和柜台 c 以某种方式使用专用端点。 服务器可以简单地拒绝不存在有效的请求 aM 在计算集中,这就是全部。
当然,你必须能够以某种方式存储这些令牌。