Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

token 后端管理思路 #12

Open
huangshuwei opened this issue Apr 17, 2018 · 0 comments
Open

token 后端管理思路 #12

huangshuwei opened this issue Apr 17, 2018 · 0 comments

Comments

@huangshuwei
Copy link
Owner

huangshuwei commented Apr 17, 2018

token 后端管理思路

token 的组成
token 的生成包含‘密钥+用户名+Mac 地址+时间戳’,然后通过可逆或者非可逆的加密方式生成token。 其中密钥是由服务端配置的特殊字符串。

token 的生成
前端携带用户名和密码发起登录,服务端验证有效后返回给前端 token。

token 的存储
1、如果token 通过可逆方式生成
不需要存储
2、如果token 通过不可逆的方式生成
需要存储,可以存储到 redis 等缓存服务器或者数据库(不推荐)。如果需要设置有效期还需要存储当前服务器时间。

token 的验证过程
1、如果token 通过可逆方式生成
前端携带token 请求后端服务器,服务器将token 结合密钥进行解密,解密后判断Mac 地址是否一致,不一致则有可能cookie 被盗用,那么返回前端token验证失败;如果Mac 地址符合则将时间戳和服务器时间比较,如果时间没有过期则token 验证成功,继续执行下面的业务逻辑。
2、如果token 通过不可逆的方式生成
前端携带token 请求后端服务器,通过 token 到 redis 等缓存服务器或者数据库中读取 token 和token的存储时间,如果没有获取到 token 信息则返回前端token验证失败;如果获取到了token 信息,则判断token 的存储时间是否过期,如果时间没有过期则token 验证成功。继续执行下面的业务逻辑。

token滑动失效策略
1、如果用户正在提交表单,突然提示‘登录信息已过去,请重新登录!’这种体验肯定是不好的。但是也没办法完全避免,比如token 有效期是1天时间,而用户表单2天后才提交。不过可以减少重新登录的概率,比如token 有效期是1天时间,用户在1天时间内操作去更新用户的最后登录时间,使token 的有效期往后顺延。但是用户的每次操作都去修改用户的最后登录时间也不合适,这里可以做一个策略,比如用户操作大于1小时间隔了再去修改最后登录时间(滑动失效时间修改时间间隔由token的过期时间决定)。
2、这个策略对于token 存储在redis 缓存服务器中的情况很好操作,但是对于token 不存储的方式(可逆的加密方式生成)有一定的困难,因为token 的生成是包含生成时间的,修改了用户的操作时间token 就会改变,这时如果也要做到token滑动失效,需要前端做响应结果处理,即数据的请求的响应结果被统一的处理,如果判断token 验证成功并且token 被修改则前端也对应的去修改token 的存储。

疑问:
客户端Mac 地址获取不到?

@huangshuwei huangshuwei added token and removed token labels Apr 17, 2018
@huangshuwei huangshuwei changed the title token 验证后端方案 前后端分离方案 Apr 17, 2018
@huangshuwei huangshuwei changed the title 前后端分离方案 token 后端管理思路 Apr 17, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant