token和sign理解

Token:令牌
用来判断用户身份的一个标识;
用户在登录的时候登录,成功的情况下生成一个token(可以是将用户信息加密,也可以是别的方式),将token返还给客户端,同时将token和用户id和时间戳存入,token表。
用户可以根据token向接口发送请求,接口在接受请求的时候,生成时间戳,验证该token在token表中是否过期,若过期则让用户重新登录,删除该token,并见新的token和新的时间戳和用户id再次存入token表。
若用户没有登录直接向接口发送请求,则没有token,接口在接受到请求的时候判断是否有token,若没有则提示用户没有登录,跳转至登录页面,让用户登录。

Sign:签名
服务端在接受到用户请求的时候判断该请求是否是来自于自己允许的平台(自己允许的平台有统一的加密规则)
客户端在向接口发送请求的时候带上参数
(参数可以是用户信息和时间戳,时间戳在第一次使用的时候就应赋值给一个变量,以后每次使用时间戳就使用该变量,因为如果每次直接调用时间戳time(),则每次得到的时间戳都不一样)。
和sign(sign内容为请求时带上的参数和token进行统一加密后的字符串),接口在接受到参数和sign后,先比较接受到的时间戳和当前时间戳,若相差超过规定时间则请求超时,让用户重新发送请求。
若对比时间戳后没有超时,则用自己统一的加密规则将接受到的参数加密(可以是用户信息和接收到的时间戳)和库中查询的到token进行处理,,处理完成后的字符串和接收到的sign进行对比,若不一样,拒绝该请求,若一样则说明正常请求,响应请求返还用户所需要的数据

token(算法)
将参数进行加密的过程中,首先将接受到的数组按照键名进行排序,然后将数组进行拆分将键和值分别取出,将所有的键转为统一的大写或小写,将值进行urlencode转义,在将键和值按照顺序md5加密后生成token返还给用户
sign(签名)
用户在向接口请求数据的时候要分为两步,第一步根据appid和secret向接口发起请求,接口将生成的时间戳和APPID一起存入数据库或redis中,并返回数据。
用户第二步向服务器发起请求生成签名时,将上一步获取的服务器时间戳和参数,以及token令牌一起按照规定算法加密生成sign,然后将sign和参数和token一起发送至服务器,但不再带上时间戳,服务器在接受到参数和数据后根据appid获取到该用户上一次请求存在redis或数据库中的时间戳,将时间戳取出和传过来的token和参数一起加密和sign进行对比。
在这过程中即使数据被人截获,即使截获人知道了我们加密算法,但缺少服务器的时间戳依然无法篡改数据

加密规则:md5,sha1,加密时用来加密的顺序也不可以改变;

在api接口方面
用户首次发起请求获取token
参数:appid,secret
服务端在接受到参数后,进行比对,如果能在库中查到该appid和secret说明是合法用户,将用户信息加密,关键就在于如何加密(首先将接受到的数组按照键名进行排序,然后将数组进行拆分将键和值分别取出,将所有的键转为统一的大写或小写,将值进行urlencode转义,在将键和值按照顺序md5加密后生成token)存入memcache中,返还给用户,用户在接受到token后可以根据此token向服务器发起请求获取数据

用户根据token发起请求获取数据
客户端获取数据分为两步
第一步根据token和appid发起请求,服务端在接受到请求后,生成一个时间戳和appid存入redis或memcache中,并将时间戳返还给客户端。
客户端在接收到时间戳后,将上一步服务端返还的时间戳和参数一起进行加密生成签名sign和参数一起发送请求,在这期间,即使数据被黑客截取,即使黑客知道了我们的加密规则,但黑客没有时间戳所以也无法篡改数据,服务端在接受到请求后,根据appid从redis或memcache中取出上一步保存的时间戳,和接收到的参数一起按照规定加密规则进行加密,加密后和发送过来的sign进行对比若不一致则说明数据丢失或被人恶意强行篡改,若一致再继续根据appid从redis或memcache中取出token进行对比,若取不到则说明token已经过期,若取到但和发送过来的token不一致则说明该token是伪造的,若token也正常,则正常返还数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值