主页 > 卜八资讯 > 微信服务器认证为什么需要这么多参数

微信服务器认证为什么需要这么多参数

在进行微信认证开发的时候,官网文档有这样一段话

当时就想为什么这么多参数,都是什么意思?网上有现成的代码,抄下来就可以运行了

可这个疑问一直在心里,百度查询了很多篇文章去解释我这个疑惑,现在就转换成个人的理解记录下来

个人服务器对于访问它的人,不能确定是谁?可能是自己的用户也可能是不明身份的人,这种情况一般会使用账户来判断,如果账户密码没有问题,那么就是自己的用户不是不明身份的人了。

本来是一个皆大欢喜的局面,但是账号密码开始的时候是明文,明文就是:账户是123: 密码是:456,在网络传输的时候,就是123、456的传输,但是中途可能被人解惑了,被别人知道了

针对这种情况,就需要进行账户密码加密了,加密有很多种

随机数+时间戳是非常常见的一种,它的原理是什么呢?

随机数nonce是由服务器提供,在用户请求服务的时候,服务商提供给用户,用户用这个随机数+账户密码按照一定规则(MD5、SHA1)加密处理为一个新的字符

712312389791(随机数)、123(账户)、456(密码)、MD5(规则)

生成:(712312389791 + 123 + 456) + MD5 = 1238979asdqw123

将生成的结果、用户名和随机数发送回服务商

(1238979asdqw123 + 123 + 712312389791) -> 服务商

注意此时是没有密码的,也就是说密码没有在中间传输,那么别人截取后也是看不懂1238979asdqw123这个是什么,但是服务器可以看懂,服务器如何看懂呢?

服务器是有用户的密码的,也就是456,那么服务器拿到(1238979asdqw123 + 123 + 712312389791)加上密码就可以生成:(712312389791 + 123 + 456) + MD5 = 1238979asdqw123(服务器生成)

此时服务器用1238979asdqw123(服务器生成)和用户发过来的1238979asdqw123对比,发现这就是我的用户就可以提供服务了,对应到微信服务器认证就是:

那么另外两个参数呢?

因为随机数是服务商发给用户的,当用户将随机数返回后

服务器会验证随机数是否是我曾经发出的,那么就需要将随机数存在服务器端,试想一下,如果用户非常多,每次生成一个随机数,总有可能会生成一个相同的随机数,一个随机数就会对应两个用户,针对这个情况,就加一个时间戳,这个时间戳只和当前时间有关系。

那么服务器第一次给用户的有随机数+时间戳

那么最后一个参数就是返回给微信服务器,告诉它返回成功了,因为你如果随便返回一个内容,微信服务器不认识你,比如返回一个“你好”,所以微信服务器给你什么,你就返回什么,就可以了。

这个不用怕被截取,因为目的是个人服务器是否认识微信服务器,而不是微信服务器认识个人服务器。

就是让你信任微信服务器,不是让微信服务器信任你

说点什么吧
  • 全部评论(0