1.概念:
在计算机语言是令牌的意思,通俗说是暗号
当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
实例:
原理:
主机和USB设备之间连续数据的交换可以分为三个阶段,
第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作;
第二个阶段发送data包;
第三个阶段由设备返回一个handshake包
2.作用
不需要服务端粗春用户的登录记录,通过客户端存储放在cookie /local Storage(本地存储)用于身份验证,
大致流程:参考:儒雅的烤地瓜
总结流程图:客户端 发送登录请求->服务端验证->token存储起来 (后来只需要去验证tooken包是不是匹配即可)
3.利用token机制进行登录认证:
a. 用设备mac地址作为token
客户端:客户端在登录时获取设备的mac地址,将其作为参数传递到服务端
服务端:服务端接收到该参数后,便用一个变量来接收,同时将其作为token保存在数据库,并将该token设置到session中。客户端每次请求的时候都要统一拦截,将客户端传递的token和服务器端session中的token进行对比,相同则登录成功,不同则拒绝。(这里的session和客户端传来的token的比较是关键)
此方式客户端和服务端统一了唯一的标识,并且保证每一个设备拥有唯一的标识。缺点是服务器端需要保存mac地址;优点是客户端无需重新登录,只要登录一次以后一直可以使用,对于超时的问题由服务端进行处理。
b. 用sessionid作为token
客户端:客户端携带用户名和密码登录
服务端:接收到用户名和密码后进行校验,正确就将本地获取的sessionid作为token返回给客户端,客户端以后只需带上请求的数据即可。
此方式的优点是方便,不用存储数据,缺点就是当session过期时,客户端必须重新登录才能请求数据。
当然,对于一些保密性较高的应用,可以采取两种方式结合的方式,将设备mac地址与用户名密码同时作为token进行认证。
4.token的存储方式
为了避免查询时间过长,可以将token放到内存中。这样查询速度绝对就不是问题了,也不用太担心占据内存。
5.tooken的加密
将请求URL、时间戳、token三者合并,通过算法进行加密处理。
最好是两种方式结合使用。
由于token的保密性不够强 一般使用的跟多的是 JSON Web Token(JWT)是一个开放标准(RFC 7519),跨域身份验证方案。
JWT: 将token 和 Payload 加密后存储于客户端,服务端只需要使用秘钥进行校验即可,不需要查询或者减少查询数据库,因为JWT自包含了用户信息和加密的数据
了解更多jwt:Token介绍_magic_hat的博客-CSDN博客