微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以使用无状态逻辑没有数据库使令牌无效?

如何解决是否可以使用无状态逻辑没有数据库使令牌无效?

我需要服务器(无后端)与客户端之间的无服务器通信。客户要求令牌。当客户端使用此令牌发出请求时,后端将生成一个新令牌并将其发送回客户端。当客户端尝试使用先前的令牌发出请求时,后端将拒绝它。我不希望后端在ram或数据库中跟踪有效/无效令牌的白名单或黑名单。如果需要(允许使用令牌有效负载中的信息),则允许后端具有静态查找表或/和静态规则/算法来执行此逻辑。 那么,有可能实现这样的目标吗?有没有一种方法可以在每个令牌中应用某种信息,以了解您是否接受过一次?

解决方法

也许您可以尝试使用TOTP https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm。这与用于MFA的算法相同。

这是python实现,您也可以找到其他语言的实现。 https://pypi.org/project/pyotp/2.0.1/

后端:

  1. 创建一个随机密钥并将其保存到静态数据库。
  2. 当客户端请求令牌时,使用随机密钥创建令牌(+ base64转换)并发回客户端。
  3. 服务器获取令牌时(-base64转换)。使用相同的随机密钥验证收到的令牌。
  4. totp算法将确保旧令牌无效。

您的令牌通常有效期为30秒。因此您可能需要决定管理令牌的有效性。

,
  1. 在您的情况下,服务器是无状态的(至少在身份验证方面),因此您不能使用服务器的状态来区分是否已使用接收到的令牌。

  2. 此外,在您生成令牌的那一刻,它就在首次使用之前,因此您无法在其中注入任何表明其是否已使用的信息:当然,那时您根本没有该信息。

因此,基本上,如果您唯一的信息容器是这两个容器(无状态服务器和自行生成的令牌),那么无论如何,答案都是;只是在信息生成时(第一次使用时)就没有地方可以放置此信息位(此令牌是否最后一个)。

从理论上讲,您可以将此信息发送给第三方实体,并在需要时将其询问.....但这只是作弊:如果您不接受DB或RAM或文件系统存储,我想通过API将信息发送到某个地方,否则只是其他选项的排除选项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。