zoukankan      html  css  js  c++  java
  • 微信服务器认证为什么需要这么多参数

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6511991367751696900/

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

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

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

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

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

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

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

    本来是一个皆大欢喜的局面,但是账号密码开始的时候是明文,明文就是:账户是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对比,发现这就是我的用户就可以提供服务了,对应到微信服务器认证就是:

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

    那么另外两个参数呢?

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    数据库设计主键定义思考
    dotnet(C#)的面试题,大家共享一下
    一些有创意的SQL语句
    asp.net(c#) 服务器探针
    存储过程共有三种返回值
    如何删除表中的重复记录?等等常用SQL语句的积累
    一般存储过程示例
    关于utf8,unicode字符集
    在Asp.net里利用DIV层元素弹出窗体
    数据库主键设计思考
  • 原文地址:https://www.cnblogs.com/bqwzy/p/8308751.html
Copyright © 2011-2022 走看看