每次访问鉴权使用token,token使用aes对称加密,鉴权时直接解密得到uid,无需访问数据库验证,
鉴权token过期后,才需要使用refresh_token从数据库验证,并生成新的token
这样鉴权,2小时才需要访问一次数据库。
也更安全,如果鉴权token在传输中被盗,也2小时就过期。
这是更安全,更加节省性能的token鉴权方式。
==流程==
登陆
【服务端】生成鉴权token(2小时,不储存)和refresh_token(30天,储存到数据库)返回给app
【APP】保存token和refresh_token
token = aes.encrypt(key,uid+'_'+timestamp)
refresh_token = md5(uid+random)
return {'token':token,'refresh_token':refresh_token}
访问鉴权
【app】带上鉴权token
token=xxxxx
【服务端】直接解密鉴权token,无需访问数据库,节省性能
text = aes.decrypt(key,token)
infos = text.split('_')
uid = int(infos[1])
timestamp = int(infos[2])
判断uid是否正确
判断timestamp是否过期
鉴权token过期
【app】带上refresh_token,获取新的鉴权token
refresh_token=xxxxxx
【服务端】
从数据库验证refresh_token并延长过期时间,同时生成新的鉴权token
refresh_token也过期
重新走登陆流程
网友评论