首先我们需要保证我们本地的服务可以被外网访问到
我们借助的工具是Ngrok,下载地址有很多,大家可以网上搜索,下载不到的朋友,私信我。
下载后,解压
解压目录
进入DOS窗口,执行以下命令
这个命令是将我们本地8080端口的服务映射到外网
执行后的效果
这个地址就可以用了,但是这个地址是每次启动都会随机生成一个,如果想要长期不变的需要付费等手段,但是目前从映射外网这个目的就满足了
我们在本地服务写一个简单的程序看是否已经可以访问
那么访问地址就变成了
我们访问下看一看
这是页面访问
本地编译器
那么就可以调试了。
我们接入微信,先做两个事情(1)填写服务器配置(2)验证服务器地址的有效性
我们心中先有一个图形概念,便于之后代码理解
我们需要先做的事情是解决这两个角色之间的问题
那么我们先去微信公众平台填写一些配置,以完成“我们的服务器”和“微信服务器”之间的通信
我们登录微信公众平台找到服务器配置(页面可能有改动,但是找服务器配置就对了)
我们先看这一部分
大概理解其中的参数
服务器地址(URL):就是我们服务器的地址,微信服务器与我们通信,我们要告诉它我们在哪里
随机字符串(EncodingAESKey),这个是用来加密解密的,今天说的微信认证暂时不涉及。可以参考我之前发送的关于加解密文章去想一想。
文章:
“互联网中常说的对称加密你到底是什么?”
“那你就是非对称加密了”
“补充一个数字签名和数字证书”
令牌(Token):可以理解为钥匙,它是一串字符串。因为网络上传递参数很不安全,为了保证双方可以确定身份,就是给我发送消息的是“微信服务器”而不是其它服务器,需要这个Token做为一个识别的钥匙,这个过程也是人们常说的认证
认证原理是这样:
微信服务器发送几个数据给我们的服务器,A、B、C、D,我们用Token加上B、C、D可以重新计算得到A1,我们一比对A和我们计算出的A1是不是一样,就可以知道给我们发送数据的是微信服务器了
微信服务器在认证我们服务器的过程时候会传递四个参数
timestamp、signature、nonce、echostr
所以过来的数据是(示例):
这几个参数我的理解是:
Nonce是由服务器生成的一个随机数,在客户端第一次请求页面时将其发回客户端;客户端拿到这个Nonce,将其与用户密码串联在一起并进行非可逆加密(MD5、SHA1等等),然后将这个加密后的字符串和用户名、Nonce、加密算法名称一起发回服务器;服务器使用接收到的用户名到数据库搜索密码,然后跟客户端使用同样的算法对其进行加密,接着将其与客户端提交上来的加密字符串进行比较,如果两个字符串一致就表示用户身份有效。这样就解决了用户密码明文被窃取的问题,攻击者就算知道了算法名和nonce也无法解密出密码。
每个nonce只能供一个用户使用一次,这样就可以防止攻击者使用重放攻击,因为该Http报文已经无效。可选的实现方式是把每一次请求的Nonce保存到数据库,客户端再一次提交请求时将请求头中得Nonce与数据库中得数据作比较,如果已存在该Nonce,则证明该请求有可能是恶意的。然而这种解决方案也有个问题,很有可能在两次正常的资源请求中,产生的随机数是一样的,这样就造成正常的请求也被当成了攻击,随着数据库中保存的随机数不断增多,这个问题就会变得很明显。所以,还需要加上另外一个参数Timestamp(时间戳)
Timestamp是根据服务器当前时间生成的一个字符串,与nonce放在一起,可以表示服务器在某个时间点生成的随机数。这样就算生成的随机数相同,但因为它们生成的时间点不一样,所以也算有效的随机数。
问题又来了,随着用户访问的增加,数据库中保存的nonce/timestamp/username数据量会变得非常大。对于这个问题,可选的解决方案是对数据设定一个“过期时间”,比如说在数据库中保存超过一天的数据将会被清除。如果是这样的,攻击者可以等待一天后,再将拦截到的HTTP报文提交到服务器,这时候因为nonce/timestamp/username数据已被服务器清除,请求将会被认为是有效的。要解决这个问题,就需要给时间戳设置一个超时时间,比如说将时间戳与服务器当前时间比较,如果相差一天则认为该时间戳是无效的。
而echostr想了很久没有想明白,它的作用很明显,是为了认证我的服务器,单只是原样返回就可以了,没有任何操作,所以我猜想,它主要是用于其它用途比如企业号里面。
Signature这个就是我们之前提到的A
相关代码
1.《微信认证图解教程》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《微信认证图解教程》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/15885.html