签名校验

  1. 使用wx.login获取code
  2. 通过code换取用户的session-key和openid
  3. 需要页面自己去做登录态管理(如在cookie设置openid)
  4. 通过调用接口(如wx.getUserInfo)获取敏感数据时,接口会同时返回rawData、signature,其中signature = sha1(rawData+session_key)
  5. 将signature、rawData、以及用户登录态发送给开发者服务器,开发者在数据库中找到该用户对应的session-key,使用相同的算法计算出签名signature2,比对signature与signature2即可校验数据的可信度。

如wx.getUserInfo的数据校验:

接口返回的rawData:

{"nickName":"Band","gender":1,"language":"zh_CN","city":"Guangzhou","province":"Guangdong","country":"CN","avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"}

用户的session-key:

HyVFkGl5F5OQWJZZaNzBBg==

所以,用于签名的字符串为:

{"nickName":"Band","gender":1,"language":"zh_CN","city":"Guangzhou","province":"Guangdong","country":"CN","avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"}HyVFkGl5F5OQWJZZaNzBBg==

使用sha1得到的结果为

75e81ceda165f4ffa64f4068af58c64b8f54b88c

加密数据

接口如果涉及敏感数据(如wx.getUserInfo当中的openid),接口的明文内容将不包含敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptData )进行对称解密。 解密算法如下:

  1. 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。
  2. 对称解密的目标密文为 Base64_Decode( encryptData ),
  3. 对称解密秘钥 aeskey = Base64_Decode( session_key ), aeskey是16字节
  4. 对称解密算法初始向量 iv = aeskey, 同样是16字节

个结果 ""

    没有找到相关内容 ""