转自: http://daily.zhihu.com/story/3783725

我个人开发过程一般是和产品说,『你们提业务要求、交互方式、性能要求等就好,技术方案我们会综合开发时间、系统架构等因素考虑』。

恰好我之前也花过几个小时做过类似的验证登录过程,这里作为探讨,把产品同学的回答做个引用,解释一下其中『不技术』的地方。

1. 每打开一次微信网页版页面的时候会随机生成一个含有唯一 uid 的二维码,每次刷新页面都会不一样(这个可以保证一个 uid 只可以绑定一个账号和密码,如果一个 uid 可以绑定多个账号和密码,那么很可能你的电脑会登陆别人的微信哦);

确实返回了唯一 id,但目的是为了识别用户身份,而且实际上打开这个页面的时候浏览器已经和 Server 创建了一个长连接等待确认信息。

查看 http://wx.qq.com 的源码可以轻易看出来,其实这个页面加载完毕的同时,也已经把很多登录后才需要的相关资源都加载进来了,然后会开启一个长连接等待登录用户的信息。

2. 当用户使用登陆后的微信扫描该二维码的时候,会将这个 id 和手机上的微信账号及密码绑定,并上传到微信网页版服务器;

先上个图:

二维码样例: http://weixin.qq.com/x/ARmFYVvUzczwBl9u6Y1I ,利用我查查之类的二维码应用可以轻易得到类似这样的地址,但并不会自动打开该地址,微信实际上针对 http://weixin.qq.com/x/ 开头的地址做了特殊处理,会自动获取相关信息并提示确认。 在手机版微信访问这个页面进行确认时,Server 已经同时获得了客户端信息,并通过之前保持的长连接告知浏览器。

3. 微信网页版页面每隔 1 秒或 2 秒会 get 请求该 id 对应的微信账号及密码,如果 id 绑定上了微信账号和密码,那么就可以请求到账号和密码,就可以自动登陆了。

浏览器展示完长连接里包含的用户信息(头像等)后,会新开一个长连接等待客户端的确认操作,其 URL 类似 https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=794ecedd804f47&tip=1&_=1395748413642 。从安全的角度来说,无论如何都不会让客户端获得微信帐号和密码,要知道,密码这玩意腾讯自己都不敢保存(有兴趣的同学可以自行了解下 CSDN 明文密码泄露事件),肯定是不可能返回给浏览器的。

而且从体感来看,怎么着都不可能是页面 1-2 秒 GET 请求的,实际是通过长连接,近乎实时的获得信息。 对于验证过程,Open API 一般是通过授权令牌(Token)来解决的,原理是当用户通过授权后,分配一个限定条件下的令牌(如限制本机访问、限制授权有效时间、限制同时登录设备数等),使获得授权的用户仅在有限的前提下能访问相关服务。 像计算机休眠后曾做的授权就自动收回了,这样就有效的避免了在别人电脑上(尤其是网吧)打开,但忘记关闭或退出这类安全问题了。

同时,整个授权过程的验证部分在手机端进行,有效杜绝了 PC 上泛滥的各类木马、『安全工具』的监听,大大降低了帐号被盗的风险。

整个核心过程是:浏览器获得一个临时 id,通过长连接等待客户端扫描带有此 id 的二维码后,从长连接中获得客户端上报给 server 的帐号信息进行展示,并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,有效完成了安全防护。

iOS开发 - 微信扫描二维码登录网页的原理相关推荐

  1. 【转】微信扫描二维码登录网页是什么原理?

    我个人开发过程一般是和产品说,『你们提业务要求.交互方式.性能要求等就好,技术方案我们会综合开发时间.系统架构等因素考虑』. 恰好我之前也花过几个小时做过类似的验证登录过程,这里作为探讨,把产品同学的 ...

  2. 微信扫描二维码登录网页原理

    恰好我之前也花过几个小时做过类似的验证登录过程,这里作为探讨,把产品同学的回答做个引用,解释一下其中『不技术』的地方. 1. 每打开一次微信网页版页面的时候会随机生成一个含有唯一 uid 的二维码,每 ...

  3. 网页扫描二维码登录页面的原理(通俗、易懂)

    我的理解是: 二维码登录网页的基本原理是,用户进入登陆网页后,服务器生成一个uid来唯一标识一个用户,每一次刷新uid都会变换,保证一个uid绑定 一个账号和密码,同时游览器与服务器创建一个长链接,用 ...

  4. 微信扫描二维码登录第三方平台

    嗯...... 最近做了一个微信扫码登陆第三方平台功能,说下步骤就行,反正原理你们网上直接百度,我这里写了,估计也没几个人有耐心看 第一步 生成一个链接 https://open.weixin.qq. ...

  5. iOS - 需求 - 微信扫描二维码支付(草稿)

    首先先讲一下这个流程: 1.商户即公司,根据微信官方支付的规则,为不同的商品或者是订单号生成不同的链接,将链接转换成二维码. 2.用户扫描二维码 3.微信客户端引导用户完成支付 4.用户完成支付,用户 ...

  6. 微信扫描二维码登录网站---href设置二维码大小

    苦逼之人,必有苦逼之处:来段代码提提神 微信文档中的参数说明是:href 说是填入一个自定义的样式链接: 我那个擦啊 :样式啥的文件都给弄好了 :结果微信这个二维码死活没有效果.百度出来的解决方案少之 ...

  7. 微信扫描二维码登陆的实现原理

    作者:程序员自由之路 https://www.cnblogs.com/54chensongxia/p/12530268.html 随着微信的普及,我们可以通过微信扫描设备二维码来实现IoT物联网场景中 ...

  8. 微信扫描二维码和浏览器扫描二维码 ios和Android 分别进入不用的提示页面

    实现微信扫描二维码和浏览器扫描二维码 ios和Android 分别进入不用的提示页面 而进入商城下载该项目 详情地址:gitee.com/DuJiaHui123- 1.创建完之后 替换文件里面的ios ...

  9. 浅谈扫描二维码登录微信网页版与摇一摇传图的实现原理

    前言:简单体验了下微信网页版通过二维码登录和摇一摇传图功能,从技术角度看,网上专家吹捧的 [隔空取物]其实并不神秘,我先简单分析一下. 1. 微信移动端扫描二维码登录(C-S-C模式) CSC模式为: ...

最新文章

  1. Python进阶-----类的继承顺序
  2. 互联网造富亲历者讲述:屌丝富了以后
  3. 使用独立mysql_MYSQL建立独立数据库以及独立数据库用户详细教程,利用PHPstudy自带的MySQL-Front...
  4. FZU 1894 志愿者选拔
  5. 二级c语言作答文件不存在,全国计算机等级考试二级C语言上机考试题库及答案...
  6. 遍历WinForm窗体 根据语言类型设置其控件Text显示
  7. centos内核错误_centos 升级内核失败回救
  8. N---Exponentiation
  9. 单片机c语言案例教程,单片机C语言案例教程
  10. 2021 年 GitHub 最佳开源软件榜单
  11. 原生JS实现上传图片预览效果
  12. 牛客 彩虹 【经典状压dp】
  13. mysql数据库密码怎么修改_MySQL数据库密码如何修改?
  14. 锐浪报表数据源access_学习锐浪报表之MySQL连接字符串的实际操作步骤汇总
  15. springboot办公用品采购领用管理系统java
  16. java继承和接口的区别_java中的接口与继承的区别
  17. DDOS学习+网络钓鱼+验证码攻击
  18. VS项目下写.bat脚本清理中间文件,减少内存空间
  19. matlab中电压跟踪型pwm,新型数字锁相环实现对电压信号的无差跟踪
  20. SpringMVC Controller中常用到的一些注解

热门文章

  1. 外贸邮件营销软件哪些好用?
  2. 恭喜,他们终于复婚,网友:我又相信爱情了
  3. Linux下的C编程实战
  4. CORS跨域资源共享 1
  5. textarea 去掉边框
  6. cut sticks
  7. 亚马逊无人机送货:过程心酸操碎心,但结果令人欣慰
  8. SQL数据集支持数据参考功能,新增飞书、钉钉、企业微信平台接入支持,DataEase开源数据可视化分析平台v1.15.0发布
  9. C#代码给图片添加水印
  10. 什么是SVN,Linux环境如何安装最新版Svn服务(yum安装1.14.1)