微信开发 wx.checkSession与session_key的作用:encryptedData包含什么信息
本文为个人理解,如有错误,还请指正
本文为个人理解,如有错误,还请指正
逻辑关系梳理
- 首先说明,只有在需要获取
union_id
的时候才会需要encryptedData
- 而
encryptedData
是getUserInfo
返回的数据,需要session_key
来解密 -
session_key
是wx.login
获得code
后,由服务端去请求的数据(一个是openid
一个是session_key
) - 然而
session_key
有有效期,getUserInfo
也需要用户点击按钮才能获取到数据 - 重点在于不确定用户什么时候点击按钮,有可能获得的
encryptedData
用上次得到的session_key
解密不了,因为他过期了。 - 所以有
wx.checkSession
来判断用户的session_key
是否过期,如果过期,需要重新执行wx.login
获取code
,然后服务端用code去请求session_key
分析作用
- 之所以会有这几样东西,是因为微信的大佬们不让
openid
和union_id
在前端明文传输。(引用一段话 :从安全角度考虑前端数据是不可信的, 因为前端甚至整个微信都有可能被劫持,但是encryptedData是加密数据, 无法伪造, 用于加密和解密的sessionKey只在微信后端和开发者后端传递。所以encryptedData可以用于防止这种情况出现) - 查看官方文档 wx.getUserInfo。可以看到,当withCredentials为true时,会返回encryptedData、iv等敏感信息,openid也被界定为敏感信息
- 再看这篇官方文档-服务端获取开放数据校验与解密,解密后的敏感数据示例中,包含了敏感数据openId、unionId,和其他几个非敏感数据(昵称头像等可以直接通过wx.getUserInfo获取到明文)。
- 而openId实际上在后端可以直接通过wx.login的code来获取,所以实际上我们只用在需要unionId时才需要用到这几样东西
???? 欢迎加入QQ 全栈开发技术交流群 – ‘300567032’,点击下方图标一键加入!