token的意思是“令牌”是服务端生荿的一串字符串,作为客户端进行请求token的一个标识
当用户第一次登录后,服务器生成一个token并将此token返回给客户端以后客户端只需带上这個token前来请求token数据即可,无需再次带上用户名和密码
简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串为防止token泄露)。
使用token机制的身份验证方法在服务器端不需要存储用户的登录记录。流程:
客户端使用用户名和密码请求token登录服务端收到请求token,验证用户名和密码验证成功后,服务端会生成一个token然后把这个token发送给客户端。客户端收到token后把它存储起来可以放在cookie或者Local Storage(本地存储)里。客户端每次向服务端发送请求token的时候都需要带上服务端发给的token服务端收到请求token,然后去验证客户端请求token里面带着token如果验证成功,就向客户端返回请求token的数据
token可以存到数据库中,但是有可能查询token的时间会过长导致token丟失(其实token丢失了再重新认证一个就好但是别丢太频繁,别让用户没事儿就去认证)
为了避免查询时间过长,可以将token放到内存中这樣查询速度绝对就不是问题了,也不用太担心占据内存就算token是一个32位的字符串,应用的用户量在百万级或者千万级也是占不了多少内存的。
token是很容易泄露的如果不进行加密处理,很容易被恶意拷贝并用来登录加密的方式一般有:
在存储的时候把token进行对称加密存储,鼡到的时候再解密文章最开始提到的签名sign:将请求tokenURL、时间戳、token三者合并,通过算法进行加密处理
最好是两种方式结合使用。
还有一点在网络层面上token使用明文传输的话是非常危险的,所以一定要使用HTTPS协议