方案一、采用https加密方案。
1、账号密码登录,返回token(其实token类似于sessionid,在session里面存放了userid信息),token有过期时间等信息。app端将token保存在本地;过期后要求重新登录,获取新的token。
2、请求参数的时候,将token传到后台,后台根据token获取userid获取用户数据。
根据token的时间期限,自动清理。
但是token一直不变的话,经常传输的过程中容易被截取。
解决方案如下:
方案二、账号密码登录https加密(推荐方案)
1、登录:返回一个固定的refreshtoken和accesstoken
2、Accesstoken用来平时请求数据,他的时间期限是固定的(可以协定设置为一天或一周根据实际情况考虑)。时间期限到了之后,就用refretoken请求新的accesstoken。
注:这样的话传输过程中会定期的改变accesstoken被人获取的伤害会减小(加上有https加密基本获取不到Accesstoken)
若需求要求一周未使用app需重新登陆的话。可以如下做法。
进入app时可以
先去本地获取上次登陆时间,有的话获取和当前时间比较。(注意:在时间范围内的话,每次进入时更新上次登陆时间为当前时间,或则会出现定期登陆现象)
超过需求要求的时间,就清空refretoken和accesstoken。要求重新登陆。
重新登陆后,服务端将refretoken和accesstoken全部更新。
服务端实现操作:
1、第一次登陆成功。
服务器产生一个refretoken和accesstoken 的map在缓存中,类似于session。
accesstoken的值为refretoken
refretoken的值为userid
用户用accesstoken登陆时可以通过获取refreshtoken来得到userid保证数据安全
2、每个accesstoken都有一个时间期限,到了时间期限服务器就需要清掉该缓存。
用户用refreshtoken来昌盛一个新的accesstoken一次往复
3、用户登录时,需要清理这个用户已经存在的accesstoken和refretoken。避免refretoken一直不变的不安全(如何刷新的话,可以在user表里面发个refretoken,登录的时候再到该token清掉产生新的重新保存)
以上只是个人想象的方案,有更好的方案,希望指教。