您的位置:首页 > 其它

access_token 分析

2018-03-13 13:35 169 查看
微信信的access_token 分析  保留 512 个字符空间
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。
公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在开发模式中获得(需要已经成为开发者,且帐号没有异常状态)。注意调用所有微信接口时均需使用https协议。
接口调用请求说明
http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 参数说明
参数 是否必须 说明
grant_type 是 获取access_token填写client_credential
appid 是 第三方用户唯一凭证
secret 是 第三方用户唯一凭证密钥,既appsecret
返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
{"access_token":"ACCESS_TOKEN","expires_in":7200}​
Token 是一个任意的字符串,你提交 Token 给微信后台之后,只有你和微信后台知道这个字符串是什么,也就是只有微信后台和我们的公众账号服务器知道这个字符串。于是 Token 就成了这两台服务器之间的密钥,它可以让公众账号服务器确认请求是来自微信后台还是恶意的第三方。具体过程如下:
1)微信后台在发送数据给公众账号服务器的时候,会额外带上3 个参数: signature、timestamp、nonce。其中 timestamp 是时间戳、nonce 是一个随机数、signature 是对 timestamp、nonce 和 Token 进行 SHA1 加密后的字符串。SHA1 的加密过程是不可逆的,即不能通过 signature、timestamp 和 nonce 计算出 Token 是什么。
2)在公众账号服务器收到 timestamp、nonce 和 signature 之后,同样对 nonce、timestamp 和 Token 使用 SHA1 加密算法,得到自己的签名,如果自己的签名和请求中的 signatrue 是一样的,那么说明请求是来自微信后台而不是恶意第三方。
注意 恶意的第三方有可能会截获到微信后台发过来的 signature、timestamp 和 nonce 三个参数,然后直接用这个三个参数来对公众账号服务器发起请求。按照上面的逻辑是无法判断的出这是个恶意的请求。这种攻击称为“replay 攻击”。这种攻击方式的防御方法很简单:加上对 timestamp 的校验。收到请求之后,我们将请求包中的 timestamp 和当前时间比较,如果误差大于一定的值就可以认为这个请求是恶意的。这里不能做相等的比较,因为数据在网络上传输需要时间,同时各个服务的本地时间也是有一些差异的。
 timestamp,当前的时间戳,这个是可以获取的。必须再加个nonce随机字符串去与token排序再SHA1加密与signature比较判断是否来自微信服务器请求。
微服务  位数197位
1. POST /api/User/UserToken
[b]参数(采用Body传值方法)[/b]1. {username: "xx", password: "123456"}

返回值

正确
1. {
2.   "data":
3.       {"accesstoken":"xxx"},
4.      "flag":1,
5.      "success":1,
6.      "expired":0
7.  }
错误
1. {
2. flag:1,
3. expired :0,
4. success : 0,
5. err :{
6.          code :"100001",
7.          Msg :"用户名或者密码错误"
8.      }
9. }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: