Node.js nodejs中的安全生存时间令牌
我在nodejs中实现了一个只通过ajax请求进行通信的API的安全令牌。Node.js nodejs中的安全生存时间令牌,node.js,algorithm,security,ttl,Node.js,Algorithm,Security,Ttl,我在nodejs中实现了一个只通过ajax请求进行通信的API的安全令牌。 每个请求都会发送一个安全令牌,如果该令牌存在,则会生成一个新令牌,并通过标头在响应中发送。 如果不存在,则响应以403结尾,这是在没有传递登录凭据的情况下 问题是,当我同时启动两个请求(比如A和B)时,它们都发送相同的安全令牌,A在B之前结束,因此在B之前更新令牌,因此在本例中传递给B的令牌无效,因为它被A无效 如何克服这个问题? 如何重新实现它?您可以使用由两部分组成的令牌:一部分在客户端和服务器之间共享,另一部分基于
每个请求都会发送一个安全令牌,如果该令牌存在,则会生成一个新令牌,并通过标头在响应中发送。
如果不存在,则响应以403结尾,这是在没有传递登录凭据的情况下 问题是,当我同时启动两个请求(比如A和B)时,它们都发送相同的安全令牌,A在B之前结束,因此在B之前更新令牌,因此在本例中传递给B的令牌无效,因为它被A无效 如何克服这个问题?
如何重新实现它?您可以使用由两部分组成的令牌:一部分在客户端和服务器之间共享,另一部分基于某些外部参数。
你甚至不需要续借 例如,假设客户机和服务器共享一个名为
t
的数字令牌,并且在第一次调用(登录、用户创建,任何您想要的)期间,他们都同意该令牌。当他们创建令牌时,他们还将计数器
c
设置为0
,并创建一对p=
,这是当前令牌(或者更好,是最后看到的令牌)。他们决不能在任何请求中显式发送令牌或计数器 当客户端希望向服务器发送消息时,步骤如下:
- 创建新值
v=t*c
- 将
更新为p
- 使用生成的令牌发送请求
v
- 计算一组接受的令牌
,如下所示:aN
(其中a0=v*(c-N/2)
)c'=(c-N/2)
a1=v*(c-N/2+1)
aN=v*(c+N/2-1)
- 如果存在与接收到的令牌相同的
,则接受请求aM
- 如果请求已被接受,如果用于创建所选
的aM
大于当前c'
c
t
和计数器c
。服务器可以简单地拒绝在计算集中不存在有效的
aM
的请求,仅此而已
当然,您必须能够以某种方式将这些令牌存储在某处。您可以使用由两部分组成的令牌:一部分在客户端和服务器之间共享,另一部分基于某些外部参数。
你甚至不需要续借 例如,假设客户机和服务器共享一个名为
t
的数字令牌,并且在第一次调用(登录、用户创建,任何您想要的)期间,他们都同意该令牌。当他们创建令牌时,他们还将计数器
c
设置为0
,并创建一对p=
,这是当前令牌(或者更好,是最后看到的令牌)。他们决不能在任何请求中显式发送令牌或计数器 当客户端希望向服务器发送消息时,步骤如下:
- 创建新值
v=t*c
- 将
更新为p
- 使用生成的令牌发送请求
v
- 计算一组接受的令牌
,如下所示:aN
(其中a0=v*(c-N/2)
)c'=(c-N/2)
a1=v*(c-N/2+1)
aN=v*(c+N/2-1)
- 如果存在与接收到的令牌相同的
,则接受请求aM
- 如果请求已被接受,如果用于创建所选
的aM
大于当前c'
c
t
和计数器c
。服务器可以简单地拒绝在计算集中不存在有效的
aM
的请求,仅此而已
当然,您必须能够以某种方式将这些代币存储在某个地方。谢谢您的回答,我会试试@不客气。让我知道它是否适合你的需要。还要注意的是,这不一定是作为解决方案绑定到nodejs的。谢谢你的回答,我会试试的@不客气。让我知道它是否适合你的需要。还请注意,它不一定作为解决方案绑定到nodejs。