Database 是否可以使用无状态逻辑(无数据库)使令牌无效?

Database 是否可以使用无状态逻辑(无数据库)使令牌无效?,database,web-applications,token,serverless,stateless,Database,Web Applications,Token,Serverless,Stateless,我需要在服务器(较少的后端)和客户端之间进行无服务器通信。客户端请求一个令牌。当客户端使用此令牌发出请求时,后端将生成一个新令牌并将其发送回客户端。当客户端尝试使用以前的令牌发出请求时,后端将拒绝该请求。我不希望后端在ram或数据库中跟踪有效/无效令牌的白名单或黑名单。如果需要,后端可以有一个静态查找表或/和一个静态规则/算法来执行此逻辑(使用令牌负载中的信息)。 那么,有可能实现这样的目标吗?是否有一种方法可以在每个令牌中应用某些类型的信息,以了解您是否接受了它一次?可能您可以尝试TOTP。这

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

可能您可以尝试TOTP。这与MFA使用的算法相同

这是python实现,您也可以找到其他语言的实现。

后端:

  • 创建一个随机键并将其保存到静态数据库
  • 当客户端请求令牌时,使用随机密钥创建令牌(+base64转换),并发送回客户端
  • 当服务器获得令牌(-base64转换)时。使用相同的随机密钥验证接收到的令牌
  • totp算法将确保旧令牌无效
  • 您的令牌通常有效期为30秒。因此,您可能需要决定如何管理令牌的有效性

  • 在您的场景中,服务器是无状态的(至少在身份验证方面),因此您无法使用服务器的状态来区分是否已使用接收到的令牌

  • 另外,当您生成令牌时,它还处于首次使用之前,因此您无法向其中注入任何说明它是否已被使用的信息:当然,您当时没有这些信息

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


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

    ………否