
其中,在所有的服务设计中,都不可避免的涉及到Token的设计。
目前,基于Token的生成方,我们把Token生成分为两种类型。
1、基于用户/网站,可见的加密请求方式
2、基于服务器间通讯的不可见加密请求方式(API Token)
其中,基于非服务器端的请求,我们要根据实际的应用场景进行一定的自定义加工。
在本次讨论中我们把非服务的请求分为了两部分。
两种请求中:
1、非登录态请求要求用户访问页面时会随机生成唯一且有时效性的token,该token在每次请求时都是不同。改方法用于当不需要登录界面的请求多且无法使用静态页面的时候使用,Token会在一定的时间内失效,以此来防止被机器爬取不需登录的界面
2、登录状态中,token会保存一定的时间,页面中的token会作为用户身份识别,同时登录态的Token需要利用session和页面信息来防止被利用。
虽说两者作用有一定的区别,但是实现的原理是相同的。
登录态的Token一般在用户登录之后由服务器产生,并保存在浏览器中,过期时间较长,用于保存用户的登录状态。
同时,我们也可以在该Token中加入一定的校验元素,例如浏览器信息,ip,获取是Cookies
如果对时效性较强的页面登录访问,我们可以加入session的校验,设置session的有效时间,能够实现自动退出的校验功能。
TimeStamp用来校验Token的生成时间。
同时,你用redis的Hset可以实现多点登录和单点登录的功能。
服务端验证Token:
在常规的API Token体系中,我们常使用短时过期Token(Oauth Token除外)。
通常 APIToken 是使用非对称加密来实现token的生成,但是世界生产中,Token 的秘钥会简化成app_id,app_key等简单的加盐参数,不过只要秘钥保存合理,Token基本无法被破解。
该Token方式要求每次请求都需要生成新的token来确保请求的时效性。
另外:为了加强API接口请求的完整性,我们也会对请求内容进行字段排序后摘要验证。(详情参考: >1token概述
专业版:基于token的身份验证是无状态的,我们不将用户信息存放在服务器中,因为无论怎么样存储,总是很多的弊端
例如
不同服务器访问
或者存储的服务器出现异常
或者说一个服务器存储过多压力大
利用不同服务器存储,服务器之间的同步问题
所以,token这种概念解决了存放在服务端的许多问题,NoSession意味着你的程序可以根据需要去增减机器,而不用担心用户是否登录
简易版:简单来说,这个token就是用于存储用户的ip地址,通过ip地址去代替了原来的session,从而达到免密登录的效果
2token的实现流程
首先,第一次登录时,后端从前端的输入框中获取信息,调取数据库的信息验证是否成功。如果校验成功,通过用户的ip地址生成一个token,返回token给到服务器。
第二次登录时,请求AIP携带的token,调取过滤器,校验token是否正确:若校验通过,返回请求数据,无需登录。若校验错误,返回错误码,调取登录页面。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)