微信认证开发教程

首先我们需要保证我们本地的服务可以被外网访问到

我们借助的工具是Ngrok,下载地址有很多,大家可以网上搜索,下载不到的朋友,私信我。

下载后,解压

解压目录

进入DOS窗口,执行以下命令

这个命令是将我们本地8080端口的服务映射到外网

执行后的效果

这个地址就可以用了,但是这个地址是每次启动都会随机生成一个,如果想要长期不变的需要付费等手段,但是目前从映射外网这个目的就满足了

我们在本地服务写一个简单的程序看是否已经可以访问

那么访问地址就变成了

我们访问下看一看

这是页面访问

本地编译器

那么就可以调试了。

我们接入微信,先做两个事情(1)填写服务器配置(2)验证服务器地址的有效性

我们心中先有一个图形概念,便于之后代码理解

我们需要先做的事情是解决这两个角色之间的问题

那么我们先去微信公众平台填写一些配置,以完成“我们的服务器”和“微信服务器”之间的通信

我们登录微信公众平台找到服务器配置(页面可能有改动,但是找服务器配置就对了)

我们先看这一部分

大概理解其中的参数

服务器地址(URL):就是我们服务器的地址,微信服务器与我们通信,我们要告诉它我们在哪里

文章:

“互联网中常说的对称加密你到底是什么?”

“那你就是非对称加密了”

“补充一个数字签名和数字证书”

令牌(Token):可以理解为钥匙,它是一串字符串。因为网络上传递参数很不安全,为了保证双方可以确定身份,就是给我发送消息的是“微信服务器”而不是其它服务器,需要这个Token做为一个识别的钥匙,这个过程也是人们常说的认证

认证原理是这样:

微信服务器在认证我们服务器的过程时候会传递四个参数

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

相关代码

本文来自企鹅号 - 分享电脑学习媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

世界上最好的语言搭建短链接及统计功能

前言 在这个营销的时代,短链接和二维码是企业进行营销中非常重要的工具,不仅仅是缩短了链接,而且还可以通过扩展获得更多的数据,诸如点击数、下载量、来源以及时间等等...

40980
来自专栏向治洪

百度map 3.0初探

1.简介     在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才...

19950
来自专栏测试开发架构之路

电子邮件工作机制

相关的几个协议 -SMTP(Simple Mail Transfer Protocol) -POP(Post Office Protocol) -IMAP(在不...

31580
来自专栏西安-晁州

TortoiseGit记住用户名&密码

配置并安装好git之后鼠标右键: ? ? 在全局配置文件末尾添加一行: [credential]       helper = store *主意保存时以utf...

24700
来自专栏赛冷思的专栏

【腾讯云的1001种玩法】个人网站如何开启HTTPS?

这是一篇分享网站开启HTTPS的文章,由于我所有云资源都是腾讯云的,所以本篇所有实例以及截图,全部都是以腾讯云为例,不过这些步骤流程都差不多,基本一致,所以,只...

2.9K10
来自专栏技术专栏

Spring Security+Spring Social+SpringBoot集成Restful可配置安全模块及代码生成器

1.本项目主要分为core核心模块,browser浏览器模块,app模块,demo使用restful实例模块及spring-boot-api-project-s...

87120
来自专栏Linyb极客之路

HTTPS安全最佳实践

HTTPS对于保护你的网站至关重要。但是你还需要避免许多陷阱 1. 没有混合内容

19830
来自专栏云计算

Kubernetes的服务网格(第3部分):对通信进行加密

在本文中,我们将展示如何在不修改当前应用代码的前提下来为所有的服务到服务的(service-to-service) HTTP 调用提供 TLS 支持。

40880
来自专栏康怀帅的专栏

Let's Encrypt SSL 证书配置详解

首先确保你的网站是可以访问的( nginx 配置好 80 端口),申请证书时 let's Encrypt 会访问网站上的某一文件来确认网站归属(当然也可以通过 ...

53240
来自专栏云知识学习

如何让服务端同时支持WebSocket和SSL加密的WebSocket

要服务端同时支持ws与wss并不容易,其难点主要在于:wss通道必须在TCP连接刚建立时(收发消息前)就要先进行SSL加密,否则,后续的通信将无法正常进行。如此...

573180

扫码关注云+社区

领取腾讯云代金券