2023年微信小程序API 用户数据的签名验证和加解密
作者: --时间: 2022-09-29
阅读量:
保障用户数据安全:微信小程序API用户数据的签名验证和加解密
1. 数据签名校验
为确保开放接口返回的用户数据安全性,微信对明文数据进行签名。开发者可以对数据包进行签名校验,确保数据完整性。
- 签名校验算法需要涉及用户的session_key。开发者需在wx.login登录流程中获取用户的session_key,并自行维护与应用的自身登录态的对应关系。
- 通过调用wx.getUserInfo等接口获取数据时,接口会同时返回rawData、signature两个参数。其中signature = sha1(rawData + session_key)。
- 开发者将signature与rawData发送到开发者服务器进行校验。服务器利用相同的算法计算出签名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
2. 加密数据解密算法
如果接口涉及敏感数据(如wx.getUserInfo中的openId和unionId),则接口的明文内容不会包含这些敏感数据。开发者需要对接口返回的加密数据(encryptedData)进行对称解密。
- 对称解密使用的算法为AES-128-CBC,数据采用PKCS#7填充。
- 对称解密的目标密文为Base64_Decode(encryptedData)。
- 对称解密秘钥aeskey=Base64_Decode(session_key),其中session_key是16字节。
- 对称解密算法初始向量iv将在数据接口中返回。
微信提供了多种编程语言的示例代码(点击下载),每种语言类型的接口名字一致。可以参照示例调用方式。
另外,为保证数据有效性,我们会在敏感数据上添加数据水印(watermark)
上一篇:2023年微信小程序API 登录
下一篇:2023年微信小程序API 打开小程序

