下面介绍二维码扫描登录原理,

首先需要web服务端,和app客户端。

web服务端主要工作是生成二维码,检测客户端提交信息正确性,更新网页界面。

app客户端主要工作是扫描二维码,提交账户信息(此不是指提交用户名和密码),与服务端通信。

那么二维码扫描登录有什么优势呢?

1 简单快捷

只需要app客户端扫描二维码,点击确认登录就完成登录了。

2 安全

在与客户端通信过程中不提供用户名和密码信息,断绝了以往直接在PC端登录木马窃取用户账户密码的行为。

那么二维码扫描登录是怎么工作的呢?

1 web服务端需要生成了一个唯一KEY,代表此次用户的登录事件ID,跟你在京东买东西下单的单号差不多。

2 根据唯一KEY生成二维码信息,显示在网页上。

3 用户app扫描二维码,后通知服务端我已经扫描了二维码。

4 服务端接收消息后,更新网页提示说已经扫描,把唯一KEY加入将要登录列表,如果超时将会移除(相当于把单号状态改为待支付状态,超过24小时就会说下单失败)。

5 用户app端主动获取当前状态,如果唯一KEY没有超时或者没有异常,将会跳转到app端的确认登录页面。

6 用户点击确认登录后,与服务端通信,提交用户名和密码验证值(可以考虑其他方案)。

7 web服务端接收后,判断验证值是否与数据库的验证值匹配,如果匹配确认用户登录。

9 用户app端检测服务端返回值,处理当前返回状态,登录成功,失败。

扫描二维码登录原理

由于二维码的发展。现在二维码的用处是越来越大了。很多地方都可以见到二维码的影子,比如二维码支付,二维码登录,等。在此之前我们先了解下二维码以下是来自百度百科的解释 :

二维码(Two-dimensional code),又称二维条码,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。在现代商业活动中,可实现的应用十分广泛,如:产品防伪/溯源、广告推送、网站链接、数据下载、商品交易、定位/导航、电子凭证、车辆管理、信息传递、名片交流、wifi共享等。如今智能手机扫一扫(简称313)功能的应用使得二维码更加普遍。

二维码可以存储信息。通过扫描可以获取二维码上面的信息,获取到之后就可以经过处理加工查询等一些操作。下面是一个二维码扫描登录的例子大致原理如图所示:

  1. 首先,服务器端要生成一个二维码在浏览器端输出,这就是我们在浏览器上见到的二维码。这里我们生产一个不重复的guid。为了避免登录错位。
  2. 此时浏览器二维码页面的脚本就会不停的发异步到服务器,返回用户是否登录成功的结果。在登录成功之前或者二维码实现之前不停的发送异步。设置一分钟二维码失效。
  3. 用户登录app,app此时有了用户登录过的加密信息。通过扫描二维码获取到唯一的guid,也就是授权码,将guid和用户信息一起打包发送给服务器做验证。认证结果发送给前端脚本所做的请求。
  4. 前端如果返回认证成功那么做登陆跳转,其他做相应的处理。

本文由免费oa系统 78oa原创,转载请注明出处

微信二维码登录原理

在电脑上使用微信时,你可能已经发现微信不提供传统的账号密码登陆,取而代之的是通过扫描二维码进行登陆。今天就要研究下次登陆方式微信时如何实现的?

AD:

在电脑上使用微信时,你可能已经发现微信不提供传统的账号密码登陆,取而代之的是通过扫描二维码进行登陆。今天就要研究下次登陆方式微信时如何实现的?

1、每次用户打开PC端登陆请求,系统返回一个唯一的uid,并将uid的信息绘制成二维码返回给用户。这里的uid一定是唯一的,否则就会造成你登陆了其他用户的账号或者其他用户登陆你的账号。

2、当用户使用登陆后的微信扫描该二维码的时候,会将这个uid和手机上的微信账号及密码产生的token进行绑定,并上传到服务器。

3、WEB通过JS不断的向后端发起请求,查询有没有关于uid的登陆记录(uid和token是否存在于服务器上)。实现代码可以从微信页面获取:

    
  1. function _poll(_asUUID) {
  2. var _self = arguments.callee,
  3. _nTime = 0;
  4. _sCurUUId = _asUUID;
  5. _logInPage("_poll Request Start, time: " + new Date().getTime());
  6. _nTime = new Date().getTime();
  7. $.ajax({
  8. type: "GET",
  9. url: "https://login." + _sBaseHost + "/cgi-bin/mmwebwx-bin/login?uuid=" + _asUUID + "&tip=" + show_tip,
  10. dataType: "script",
  11. cache: false,
  12. timeout: _nAjaxTimeout,
  13. success: function(data, textStatus, jqXHR) {
  14. _logInPage("_poll Request Success, code: " + window.code + ", time: " + (new Date().getTime() - _nTime) + "ms");
  15. switch (_aoWin.code) {
  16. case 200:
  17. _sSecondRequestTime = new Date().getTime() - _sSecondRequestTime;
  18. _logInPage("Second Request Success, time: " + _sSecondRequestTime + "ms");
  19. clearTimeout(_oResetTimeout);
  20. $.get(_aoWin.redirect_uri + "&fun=new", function(msg) {
  21. _logInPage("new func reponse, reponseMsg: " + msg);
  22. _reportNow("new func reponse, reponseMsg: " + msg);
  23. var code = msg.match(/<script>(.*)<\/script>/);
  24. if(code){
  25. eval(code[1]);
  26. }else{
  27. $("#container").show();
  28. $("#login_container").hide();
  29. }
  30. });
  31. _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Success, uuid: " + _asUUID + ", time: " + _sSecondRequestTime + "ms");
  32. break;
  33. case 201:
  34. clearTimeout(_oResetTimeout);
  35. show_tip = 0;
  36. $('.errorMsg').hide();
  37. $('.normlDesc').hide();
  38. $('.successMsg').show();
  39. _logInPage("First Request Success");
  40. _reportNow("/cgi-bin/mmwebwx-bin/login, First Request Success, uuid: " + _asUUID);
  41. //                setTimeout(function(){
  42. _logInPage("Second Request Start");
  43. _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Start, uuid: " + _asUUID);
  44. _sSecondRequestTime = new Date().getTime();
  45. _nAjaxTimeout = 5 * 1000;
  46. _self(_asUUID);
  47. //                }, 500);
  48. break;
  49. case 408:
  50. setTimeout(function(){
  51. _self(_asUUID);
  52. }, 500);
  53. break;
  54. case 400:
  55. case 500:
  56. _reset();
  57. _afterLoadWebMMDo(function(){
  58. _aoWin.Log.d("500, Login Poll Svr Exception");
  59. });
  60. break;
  61. }
  62. },
  63. error: function(jqXHR, textStatus, errorThrown) {
  64. if (textStatus == 'timeout') {
  65. setTimeout(function(){
  66. _self(_asUUID);
  67. }, 500);
  68. } else {
  69. setTimeout(function(){
  70. _self(_asUUID);
  71. }, 5000);
  72. _logInPage("_poll Request Error:" + textStatus);
  73. _afterLoadWebMMDo(function(){
  74. _aoWin.Log.e("Login Poll Error:" + textStatus);
  75. });
  76. }
  77. }
  78. });
  79. }

网页客户端每500毫秒就向服务器发起ssl请求,请求当前二维码的登陆信息,如果返回结果201,则说明已经获取扫描二维码终端相同的账号登陆授权,当返回其他结果时,将在500毫秒之后重新发起请求。

类似微信登陆场景应用场景还是很多,比如通过二维码进行设备间的授权。比如使用手机遥控 装有android系统的电视盒等。

原文链接:http://www.biaodianfu.com/weixin-qrcode.html

Android 应用之二维码扫描登录相关推荐

  1. Android实现二维码扫描登录网页

    之前写过一个二维码扫描demo,用的Zxing的框架,点击下载,后续扫描二维码中出现一些问题,比如解决压缩图片,调整扫描窗口大小等等.后续单位要求做扫描登录实现,发现难点就是怎么知道你扫描的是这台电脑 ...

  2. 聊一聊二维码扫描登录原理

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:2 个月的面试亲身经历告诉大家,如何进入大厂? 扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且 ...

  3. uniapp中qrcode生成二维码后传的参数不见了_二维码扫描登录,你必须知道的 3 件事...

    作者 | 互联网平头哥 本文经授权转载自互联网平头哥(ID:it_pingtouge) 扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录,不搞个扫码登录 ...

  4. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  5. [转载]android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) 前天早上登陆CSDN时候一条消息:一网友提出了两点疑惑 扫描框目前只是做的假象,是全屏的图片进行解析 中文乱码现象 ...

  6. 微信二维码扫描登录原理解析

    扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录. 一,传统项目移动端基于 token 的认证机制 在了解扫码登录原理之前,有必要先了解移动端基于 to ...

  7. Android 基于Zxing二维码扫描的光速实现

    Android 十分钟光速实现二维码扫描 前言 在项目中要使用到二维码的相关内容,我们第一时间想到的是使用大名鼎鼎的zxing或者ZBar开源框架: github-zxing官方库的地址 github ...

  8. Android实现一维二维码扫描生成功能(一)-zxing导入现有项目

    前言 目前二维码扫描功能很流行也非常成熟了,而zxing项目也是目前可以说是最流行的二维码扫描方面的开源项目了,很多大神都对zxing进行了封装,github上也有很多好用的二维码开源库,但是我更喜欢 ...

  9. Android 9 实现二维码扫描处理(BGAQRCode-Android) 笔记

    首先声明,本笔记是在下面这位大佬的代码基础上改的,本人会将实现过程中出现的问题和经验写在下面,本笔记可以结合github上作者的readme一起看: https://github.com/bingoo ...

最新文章

  1. weex 阶段总结
  2. [New Portal]Windows Azure Virtual Machine (8) Virtual Machine高可用(上)
  3. tomcat线程释放时间_聊下并发和Tomcat线程数(错误更正)
  4. centos 编译 mysql_centos 编译安装mysql
  5. 使用go语言GUI库实现对mp3文件的播放1(简单的播放mp3文件)
  6. 在.net3.5中使用ListView控件和DataPager控件笔记
  7. javascript设计模式系列 - LukeLin - 博客园
  8. [渝粤教育] 中国地质大学 材料力学 复习题 (2)
  9. windows7 python 指定源组播 10049_Python3组播通信编程实现教程(发送者+接收者)
  10. python重载运算符乘法_Python | 使用乘法运算符创建一个字符串的多个副本
  11. js多线程的实现-Worker
  12. antd vue关闭模态对话框_Vue.extend 登录注册模态框
  13. django 1.8 官方文档翻译: 9-1-1 国际化和本地化
  14. mkpasswd命令使用方法
  15. P2839 畅通工程
  16. jQuery按ID选择
  17. 数组元素循环右移问题
  18. 计算机二进制中的原码,反码,补码
  19. 奇迹,是为了信念牺牲一切(高策)
  20. 3. 编程规范和编程安全指南--java

热门文章

  1. 群表示论之置换特征标和S4的三阶不可约表示下篇
  2. 为ActiveX控件创建Cab文件
  3. 从这两年的云计算行业安全黑板报来看看云安全现状
  4. PLL与DLL锁相环介绍
  5. 12口三层网管交换机的冰火两重天 (EMS试验和高低温测试)
  6. 拓扑与量子物理题目选做
  7. 基于java足球赛会管理系统(java毕业设计)
  8. InDesign 教程:如何链接图形?
  9. 时滞电力系统matlab,基于Wirtinger不等式的时滞电力系统稳定性判定方法
  10. 实施MES管理系统前的立项分析