微信开发 wx.checkSession与session_key的作用:encryptedData包含什么信息

本文为个人理解,如有错误,还请指正
本文为个人理解,如有错误,还请指正

逻辑关系梳理

  • 首先说明,只有在需要获取union_id的时候才会需要encryptedData
  • encryptedDatagetUserInfo返回的数据,需要session_key来解密
  • session_keywx.login获得code后,由服务端去请求的数据(一个是openid一个是session_key)
  • 然而session_key有有效期,getUserInfo需要用户点击按钮才能获取到数据
  • 重点在于不确定用户什么时候点击按钮,有可能获得的encryptedData用上次得到的session_key解密不了,因为他过期了。
  • 所以有wx.checkSession来判断用户的session_key是否过期,如果过期,需要重新执行wx.login获取code,然后服务端用code去请求session_key

分析作用

  • 之所以会有这几样东西,是因为微信的大佬们不让 openidunion_id 在前端明文传输。(引用一段话 :从安全角度考虑前端数据是不可信的, 因为前端甚至整个微信都有可能被劫持,但是encryptedData是加密数据, 无法伪造, 用于加密和解密的sessionKey只在微信后端和开发者后端传递。所以encryptedData可以用于防止这种情况出现)
  • 查看官方文档 wx.getUserInfo。可以看到,当withCredentials为true时,会返回encryptedData、iv等敏感信息,openid也被界定为敏感信息
    微信开发 wx.checkSession与session_key的作用:encryptedData包含什么信息
    微信开发 wx.checkSession与session_key的作用:encryptedData包含什么信息
  • 再看这篇官方文档-服务端获取开放数据校验与解密,解密后的敏感数据示例中,包含了敏感数据openId、unionId,和其他几个非敏感数据(昵称头像等可以直接通过wx.getUserInfo获取到明文)。
    微信开发 wx.checkSession与session_key的作用:encryptedData包含什么信息
  • 而openId实际上在后端可以直接通过wx.login的code来获取,所以实际上我们只用在需要unionId时才需要用到这几样东西

???? 欢迎加入QQ 全栈开发技术交流群 – ‘300567032’,点击下方图标一键加入!
微信开发 wx.checkSession与session_key的作用:encryptedData包含什么信息