token生成
token = "用户名:过期时间:token签名"
用户名:通过该字段获取用户的其他信息,同时用来生成token签名
过期时间:第一个作用是验证token是否过期,第二个作用是生成token签名
token签名:根据用户的数据和过期时间,用一套稳定的签名生成算法A,生成的签名。用来验证token,防止用户伪造token。
token 签名 = A(用户名,过期时间,私有key,其他特定的用户信息如密码)
当密码参与token签名的生成时,只要修改过密码,token即失效。token签名的参数应该具有稳定性,不能经常变更。
优点:简单,有效。只需要一张表就可以完成上述信息的
缺点:token中包含用户名
缺点解决方案:
- 用对称加密生成token,需要使用时再解密。
token = 对称加密("用户名:过期时间",密钥)
- 从token中去掉用户名和过期时间字段,新建一张表,建立 token 到 用户名 的映射关系. 需要用户名的时候就去查表。避免了用户名暴露在token中。这样的话就需要经常维护这张表,去掉过期的记录。
token = "token签名"用户名 + 过期时间 = 查找(token)
- 用token签名作为token,并使用Redis(或其他KV数据库)存储用户名到token的映射。过期时间依靠Redis自带的机制实现(或其他方式)。
token = "token签名"用户名 = Redis查找(token)
token不存在,那么token就是非法的。要使原有的token无效,就从Redis中删除对应的token。
以上是 token生成 的全部内容, 来源链接: utcz.com/z/516472.html