总结一下token

一直对token的作用不大明白. ###一.微信公众号

开发微信公众号的时候,我们需要在微信公众平台的配置界面 写一个token和我们服务器端的url接口.

普通用户和公众号交互的具体流程是:用户发送一条文本或其他信息,该信息发送到微信的服务器,微信的服务器向之前我们填写的服务器的url接口,推送该用户发送的信息,为了保证良好的体验,微信希望我们能在5秒内作出响应。

微信每次推送信息给我们的服务器时,都会直接在url后携带几个参数,signature,timestamp,nonce 具体的验证: 把token(我们指定的,当然是已知), timestamp,nonce 三个值以字典序排序后,进行sha1加密。 和signature 比较,如果相同,则可认定是微信在访问我们的接口,而不是其他恶意来源

当我们访问微信的接口时,微信要求我们必须携带一个access_token. 这个access_token是哪里来的呢?我们可以看到开发者设置界面有一个app_id, app_sercet。我们可以根据这个两个参数,访问一个获取access_token的接口即可返回. 以后,我们访问微信提供的接口都携带access_token即可,注意,access_token是有时间限制的,默认过期时间为7200秒,每天获取access_token的次数也是有上限的.只要按照规定来,完全是够用的..

通过access_token,微信服务器也可以确定是哪个微信公众号的合法请求,而不是恶意用户

###二.公司的项目里用到的token

我们的Android端(其他同理)访问接口时,必将携带下面的参数

reqtime, user, token, source Android端这里的source和user 都是'Android'.

验证: 先看source渠道,根据user,source,key,reqtime一起md5. 看是不是和token相等。这里面只有key不是通过网络传输过来的. 这里可以还可以根据reqtime, 给定一个时间约束,一旦超过指定时间,则视为无效

三.比较

项目中的验证方法和微信还是类似的.只是名字不一样罢了. 都是本地持有一个私有的字符串(微信公众号里叫token,我们叫key)这里统一叫S, 这个S是不变的,任何时候都不需要通过网络传输的 根据这个S, 和其他一些参数,比如A,B . 通过加密生成一个新的字符串C.我们只需要传输A,B,C即可

对方拿到A,B,C三个参数后,再按照之前的算法,A,B,S加密看是不是等于C. 只要等于C,说明就是合法的来源

转载于:https://my.oschina.net/u/1777377/blog/518565

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值