欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 小程序中神秘的用户数据

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:500

小程序中神秘的用户数据

发布时间:2020-10-26  

上一篇文章 手把手教会你小程序登录鉴权 介绍了小程序如何进行登录鉴权,那么一般小程序的用户标识可以使用上文所述微信提供的 jscode2session 接口来换取,小程序还提供了一个 getUserInfo 的API来获取用户数据,这个用户数据里面也可以包含当前的用户标识openid。本文就 如何获取小程序中的用户数据及数据完整性校验 等内容来展开详述

API介绍

wx.getUserInfo 是用来获取用户信息的API接口,下面是对应的参数字段:

小程序中神秘的用户数据


lang 指定返回用户信息的语言,有三个值:lang

zh_CN 简体中文

zh_TW 繁体中文

en 英文,默认为en

timeout

timeout 指定API调用的超时时间, getUserInfo API其实底层也是客户端发起一个http请求,来获取到用户的相关数据,经过封装后返回给小程序端,后面会给大家详细介绍。

withCredentials

withCredentials 这个字段是一个布尔类型的值,决定了在调用API时小程序返回的数据里是否带上登录态信息,不填的话默认该字段的值为 true

那么此时API返回的结果为:

小程序中神秘的用户数据


encryptedData 为包括敏感数据在内的完整用户信息的加密数据,敏感数据涉及到了用户的 openid 及 unionid 等。那么数据加密采用的算法为 AES-128-CBC 分组对称加解密算法,后面我们对这个加密算法进行详细分析。如果该字段的值为 false ,就不会返回上面这两个字段: encryptedData , iv 。

iv 为上述解密算法的算法初始向量。同样我们在后面会详细介绍。

rawData 为一个对象字符串,里面包含了用户的一些开放数据,分别是: nickName(微信昵称) 、 province(所属省份) 、 language(微信客户端内设置的语言类型) 、 gender(用户性别) 、 country(所在国家) 、 city(所在城市) 、 avatarUrl(微信头像地址)

signature 为了保证数据的有效性和安全性,小程序对明文数据进行了签名。这个值是 sha1(rawData + session_key) 计算后的值, sha1 则是一种密码的哈希函数,相比于 md5 哈希函数来说抗攻击性更强。

userInfo 字段是一个对象,也是用户开放数据,和rawData展示的内容一致,只不过rawData将对象序列化为字符串作为返回值。

API之http请求

前面给大家讲到在客户端内调用 getUserInfo API时,微信客户端会向微信服务端发送一条请求,在微信开发者工具里通过 http请求抓包可以看到,发出了一条 https://servicewechat.com/wxa-dev-logic/jsoperatewxdata 这样的http请求。

请求体里携带了几个重要的参数,包括 data , grant_type 等,data字段是一个JSON字符串,里面有一个字段 api_name ,其值为'webapi_userinfo'。而grant_type字段也对应了一个值“webapi_userinfo”。

响应体返回了一个JSON对象,首先是一个 baseresponse 字段,里面包含了接口调用的返回码 errcode 和调用结果 errmsg 。该对象还返回了一个 data 字段,这个data字段对应了一个JSON字符串,里面就是通过调用API拿到的所有用户数据信息。在开发者工具内,我们还可以看到返回了一个 debug_info 字段,这个里面同样包含了用户的数据 data ,只不过这里的 data 还返回了用户的openid,同时还返回了用户的session_key登录态凭据。

一般我们可以在开发者工具内通过抓包,来调试一些信息的有效性,包括用户的 session_key和 openid 。

AES-128-CBC 加密算法

上面我们说过,在小程序里通过API获取到的用户完整信息 encryptedData ,是需要通过 AES-128-CBC 算法来加解密的。首先我们先来了解什么是 AES-128-CBC :

AES 全称为 Advanced Encryption Standard,是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范,它是一种分组加密标准,每个加密块大小为128位,允许的密钥长度为128、192和256位。

分组加密有五种模式,分别是

ECB(Electronic Codebook Book) 电码本模式 CBC(Cipher Block Chaining) 密码分组链接模式 CTR(Counter) 计算器模式 CFB(Cipher FeedBack) 密码反馈模式 OFB(Output FeedBack) 输出反馈模式

本文标签

: