小程序登录——用户个人信息解密
前段时间在忙一个微信小程序的项目,这边就用户登录和用户信息的解密来做一个总结。
外链图片失效可以访问个人博客
一、小程序登录流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KfulZjQE-1592389622317)(https://i.loli.net/2020/06/15/gDflEouymZFjWG3.jpg)]
- 小程序向
wx.login()
发送请求获取到code
- 小程序将自己的登录信息和
code
发送到开发者的服务器 - 服务器拿到
code
和申请到小程序申请的AppID
和AppSecret
一起发送到微信后台 - 微信后台返回
session_id
和openid
给开发者服务器 - 服务器通过特定算法校验签名解密信息
- 服务器给小程序下发令牌
token
- 小程序将
token
存入内存并加在每次请求的请求头中 - 服务器验证
token
的合法性,并返回业务数据
二、小程序 code 的获取
1. wx.getUserInfo()
该接口会返回用户信息和用户的明文信息编码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4RtRDw2x-1592389622324)(https://i.loli.net/2020/06/15/Plx6Ygm253ncuJr.png)]
encryptedData
:包括敏感数据在内的完整用户信息的加密数据iv
:加密算法的初始向量signature
:使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息userInfo
:用户信息对象,不包含 openid 等敏感信息errMsg
:返回状态信息
2. wx.wx.login
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mvTtCMGB-1592389622325)(https://i.loli.net/2020/06/15/kyq1uwsTdL4YxWS.png)]
errMsg
:返回状态信息code
:用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openid 和 session_key 等信息
三、搭建服务器接受参数
小程序端发送参数
uni.request({
url: 'http://127.0.0.1:8080',
method: 'POST',
data: {
js_code: this.js_code,
encryptedData: this.encryptedData,
iv: this.iv,
rawData: this.rawData,
signature: this.signature },
success: function success(res) {
console.log(res.data);
_this.text = 'request success';
} });
后端参数接收
在这里我们以 Springboot 为例作为我们的开发者服务器后来来接受传递参数,这里只是简单测试解密就将业务代码放在 controller 层
@RestController
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@CrossOrigin
// 处理跨域请求
@PostMapping("/")
String index(@RequestBody Map map) {
String code = (String) map.get<