Token验证

2.1.2 Token 验证

宝丽来 Z2300 拍立得相机(白色) Token 是一个任意的字符串,你提交 Token 给微信后台之后,只有你和微信后台知道这个字符串是什么,也就是只有微信后台和我们的公众账号服务器知道这个字符串。于是 Token 就成了这两台服务器之间的密钥,它可以让公众账号服务器确认请求是来自微信后台还是恶意的第三方。具体过程如下:
1)微信后台在发送数据给公众账号服务器的时候,会额外带上3 个参数: signature、timestamp、nonce。其中 timestamp 是时间戳、nonce 是一个随机数、signature 是对 timestamp、nonce 和 Token 进行 SHA1 加密后的字符串。SHA1 的加密过程是不可逆的,即不能通过 signature、timestamp 和 nonce 计算出 Token 是什么。
2)在公众账号服务器收到 timestamp、nonce 和 signature 之后,同样对 nonce、timestamp 和 Token 使用 SHA1 加密算法,得到自己的签名,如果自己的签名和请求中的 signatrue 是一样的,那么说明请求是来自微信后台而不是恶意第三方。


注意 恶意的第三方有可能会截获到微信后台发过来的 signature、timestamp 和 nonce 三个参数,然后直接用这个三个参数来对公众账号服务器发起请求。按照上面的逻辑是无法判断的出这是个恶意的请求。这种攻击称为“replay 攻击”。这种攻击方式的防御方法很简单:加上对 timestamp 的校验。收到请求之后,我们将请求包中的 timestamp 和当前时间比较,如果误差大于一定的值就可以认为这个请求是恶意的。这里不能做相等的比较,因为数据在网络上传输需要时间,同时各个服务的本地时间也是有一些差异的。

具体如何通过代码实现这些,我们会在下一章讲解。

开发接口access_token长度修改通知

2014年04月25日,微信团队发布系统公告
请开发者注意,由于技术升级,公众平台的开发接口的 access_token 长度将增长,其存储至少要保留 512 个字符空间。此修改将在1个月后生效,请开发者尽快修改兼容。

下一节 2.2 接收用户信息
上一节 2.1.1 接口配置信息
返回微信公众平台应用开发实战

天香空城微信二维码
关注 天香空城 微信号 ulisse 或扫描二维码,可以了解微信营销书籍
微信营销书评
微信公众平台开发源码

返回微信营销