TOken什么意思,TOKEN什么意思

3.1 Token验证

Token是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token的值会保存到微信后台。只有服务器和微信后台知道这个字符串,也就是说只有微信后台和公众账号服务器知道这个字符串。于是Token就成了这两台服务器之间的密钥,它可以让公众账号服务器确认请求是来自微信后台还是恶意的第三方。以下是Token验证的具体过程。

1)微信后台在向公众账号服务器发送数据的时候,会额外带上4个参数:timestamp、signature、nonce、echostr,如表3-1所示。其中timestamp是时间戳,nonce是一个随机数,signature是对timestamp、nonce和Token进行SHA1加密后的字符串。SHA1的加密过程是不可逆的,即不能通过timestamp、signature和nonce计算出Token是什么。

表3-1 URL参数说明
 

2)在公众账号服务器收到timestamp、signature和nonce之后,同样对nonce、timestamp和Token使用SHA1加密算法,得到自己的签名,如果自己的签名和请求中的signatrue是一样的,那么说明请求是来自微信后台而不是恶意第三方。

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

微信服务器通过检验signature对请求进行校验(下面有校验方式)。若此次GET的Token验证可以通过,则表示该请求来自微信服务器,这时会原样返回echostr参数内容,表示接入生效,否则接入失败。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注