如何使有效的访问令牌无效

时间:2015-12-07 08:15:42

标签: rest access-token

在宁静的应用中,对于某些要求,例如。在客户端,同一用户可以同时只使用一个访问令牌,用户可以通过登录成功获取新的访问令牌。如果登录两次,用户将获得两个不同的访问令牌,说它是访问令牌A和B.后端,当用户仍然使用令牌A与服务器通信时,它应该是无效的,后者B应该是有效的!如何实现这个而不使用缓存框架或db ? 此外,在后端,我不希望存储任何访问令牌,访问令牌包含简单的用户信息和时间戳等,这是一个用AES加密并用Base64编码的字符串。

2 个答案:

答案 0 :(得分:1)

不幸的是,如果没有持久化令牌,你将无法做到你想要的。

answered之前有关基于令牌的身份验证的问题。也许你可以从there获得灵感。

不同类型的令牌

基本上,令牌可以是 opaque (除了值本身之外没有显示任何细节,比如随机字符串)或者可以自包含< / em>(例如 JSON Web Token )。

  • 随机字符串:可以通过生成随机字符串并将其持久保存到具有过期日期且与其关联的用户标识符的数据库来发出令牌。

    < / LI>
  • JSON Web令牌(JWT):由RFC 7519定义,它是在两方之间安全地表示声明的标准方法。 JWT是一个独立的令牌,使您能够在有效负载中存储用户标识符,到期日期和任何您想要的内容(但不在其上存储密码),这是{{3编码为JSON。客户端可以读取有效负载,并且可以通过验证服务器上的签名来轻松检查令牌的完整性。如果您不需要跟踪JWT令牌,则无需持久保存JWT令牌。尽管如此,通过持久存在令牌,您将有可能使其无效并撤销其访问权限。要找到一些与JWT合作的优秀资源,请查看Base64

持久令牌

http://jwt.io您可以持久保存令牌。根据您的要求,您可以探索不同的解决方案,例如many databasesrelational databaseskey-value stores

请记住删除旧令牌以防止数据库无限期增长; - )

答案 1 :(得分:0)

必须在Authorization标头中的每个请求中发送访问令牌。对于您存储其访问令牌的每个用户。因此,访问令牌到达时,您检查其值并查找它是哪个用户。如果找不到访问令牌,则用户未获得授权。

所以基本上当你生成新令牌时,你替换给定用户的旧访问令牌,当旧的访问令牌到来时你无法识别它(它没有存储在任何地方),因此它是无效的。