轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 终极进阶 查看主题

微信小程序登录态验证流程

发布者: lhb2003888 | 发布时间: 2017-2-21 12:06| 查看数: 4461| 评论数: 1|帖子模式

  1. 小程序调用wx.login得到code.

    调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)。用户数据的加解密通讯需要依赖会话密钥完成。

  2. 小程序调用wx.getUserInfo得到rawData, signatrue, encryptData.

  3. 小程序调用server获取token接口, 传入code, rawData, signature, encryptData.

  4. server调用微信提供的jsoncode2session接口获取openid, session_key, 调用失败应给予客户端反馈, 微信侧返回错误则可判断为恶意请求, 可以不返回. 微信文档链接

    这是一个 HTTP 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。其中 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输

    接口地址:""

  5. server计算signature, 并与小程序传入的signature比较, 校验signature的合法性, 不匹配则返回signature不匹配的错误. 不匹配的场景可判断为恶意请求, 可以不返回. 微信文档链接

    通过调用接口(如 wx.getUserInfo)获取敏感数据时,接口会同时返回 rawData、signature,其中 signature = sha1( rawData + session_key )

    将 signature、rawData、以及用户登录态发送给开发者服务器,开发者在数据库中找到该用户对应的 session-key,使用相同的算法计算出签名 signature2 ,比对 signature 与 signature2 即可校验数据的可信度。

  6. 使用第4步返回的session_key解密encryptData, 将解得的信息与rawData中信息进行比较, 需要完全匹配, 解得的信息中也包括openid, 也需要与第4步返回的openid匹配. 解密失败或不匹配应该返回客户相应错误. 微信文档链接

    • 接口如果涉及敏感数据(如wx.getUserInfo当中的 openid ),接口的明文内容将不包含敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptData )进行对称解密。 解密算法如下:

    1. 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。
    2. 对称解密的目标密文为 Base64_Decode(encryptData),
    3. 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节
    4. 对称解密算法初始向量 iv = aeskey, 同样是16字节

    {
        "nickName": "Band",
        "gender": 1,
        "language": "zh_CN",
        "city": "Guangzhou",
        "province": "Guangdong",
        "country": "CN",
        "avatarUrl": ""
    }
    
    {
        "openId": "OPENID",
        "nickName": "NICKNAME",
        "gender": 1,
        "city": "CITY",
        "province": "PROVINCE",
        "country": "COUNTRY",
        "avatarUrl": "AVATARURL",
        "unionId": "UNIONID"
    }
    
  7. 使用session_key作为密钥, 加密至少包括openid, timestamp, random(随机值), version(版本)的内容, 得到token. 加密算法可以参考微信对encryptData的加密算法. server应该缓存session_key, 缓存的过期时间不应该小于token的过期时间. 将openid, token返回给客户端.

  8. 小程序每次业务请求都必须带上openid和token, server验证token的合法性: token能否被正常解密; 解密后的openid和传入的openid是否一致; 解密后可得到token的生成时间, token是否过期. 全部校验通过即可正常处理业务请求.

最新评论

小海疼 发表于 2022-4-26 11:38
素材下载网站源码

浏览过的版块

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表