gpt4 book ai didi

node.js - nodejs 中实时 token 的安全时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:54 27 4
gpt4 key购买 nike

我在 nodejs 中实现了一个仅通过 ajax 请求进行通信的 API 的安全 token 。
每次请求都会发送一个安全 token ,如果此 token 存在,则会生成一个新 token 并通过 header 在响应中发送。
如果不存在,则响应以 403 结束,这是在没有通过登录凭据的情况下。

问题是当我同时启动两个请求时(比如 AB),它们都发送相同的安全 token ,A B 之前结束,因此在 B 之前更新 token ,因此传递给 B 的 token 在这种情况下无效,因为它已被 A 无效。

我该如何克服这个问题?
我怎样才能重新实现它?

最佳答案

您可以使用由两部分组成的 token :一部分在客户端和服务器之间共享,另一部分基于某些外部参数。
您甚至不必续订它。

例如,假设客户端和服务器共享一个名为 t 的数字 token 他们在第一次通话时就该 token 达成一致(登录、用户创建,无论您想要什么)。
当他们创建 token 时,他们还设置了一个计数器 c0并创建一对p = <t, c>那是当前 token (或者更好的是,最后一次看到)。
他们绝不能在任何请求中明确发送 token 或计数器。

当客户端要向服务器发送消息时,步骤是:

  • 创建新值 v = t*c
  • 已更新 p作为<t,c+1>
  • 使用生成的 token 发送请求 v

每个请求都会有一个唯一的实际 token 。

要验证服务器上的 token ,步骤是:

  • 计算一组接受的 token aN如下:
    • a0 = v*(c-N/2) (其中c' = (c-N/2))
    • a1 = v*(c-N/2+1)
    • ...
    • aN = v*(c+N/2-1)
  • 如果存在aM等于收到的 token ,然后接受请求
  • 如果请求已被接受,如果 c' 相应地更新计数器服务器端用于创建所选的 aM大于当前 c

这样,并发请求得到很好的处理,您不必显式更新 token 。

每当请求失败时,客户端可以决定重置共享 token t和柜台c以某种方式使用专用端点。
服务器可以简单地拒绝不存在有效 aM 的请求。在计算集中,仅此而已。

当然,您必须能够以某种方式将这些 token 存储在某个地方。

关于node.js - nodejs 中实时 token 的安全时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com