Token 的简述
token 顾名思义就是一块令牌(临时的令牌),我们可将它理解为一种暗号,类似于对口号。这个令牌 token 是由服务器生产,一串字符串,然后会一式两份分别有客户端 与 服务器保管。
Token 的作用
token 可以免去从前标记用户登录的方式,不需要繁多的登录操作,请求端只需要携带 token 去访问服务器,服务器会根据 token 认证是否成功进行区别响应。
token 更好的确保用户的信息与财产安全,防止 CSRF 攻击(简单说就是防止被盗号),因为我们只需要在信任的网站输入账号+密码登录即可,如果访问其它(第三方)级别不高的网站需要认证时,我们可以仍然可以选择安全的网站去登录认证,然后通过携带 token 去访问安全系数稍低的网站。
Token 说明
token 是一串字符串,但不表示长度固定或者格式一定相同,因为虽然我们可以使用 JWT 规范来生成 token,但我们同样可以自定义生成 token 的方式,只要保证我们的 token 有关键的 key 与 value ,然后能够正常加解密(同样可以自定义加解密方式),通常 token 包含足够的信息(信息放入多少及哪些取决编码):比如用户id,时限,此token的唯一标识等等,通过拼接各键值对并加解密得到 token 字符串,示例如下:
fbb91fa4-524f-4e97-8c18-9d5891baea65 // token 最后的模样
1
Token 的时效
既然 token 是暗号,那我们自然会想到肯定不会永远用同样一句暗号,定期更换是最合理的,但我们也不可能将 token 的有效时间设置太短(太短就会出现 token 过期 就需要用户重新登录 体验会很差),通常 token 的过期时间不会超过1小时,为了使我们设置token时间不相互矛盾,这里需要引入 Refresh Token 对象。
其实两者很相似都是加密过的字符串,Refresh Token 存在就是为了当客户端的 Token 过期后能够高效快捷的进行刷新,重新获取 Token(注意仅获取新 Token),至于 Refresh Token 的过期时间设置就稍稍随意些(1天7天甚至几个月均可以)。当 Refresh Token 对象也过期后,就需要用户重新登录认证了。
关于 Token 与 Refresh Token 使用方式、时机、时序等如下图所示
登录认证:
请求:
token 与 refresh token 配合使用。