丹凤千字科普:只有一部手机怎么扫描二维码(详细资料介绍)

近日,我观看了极客时间关于二维码技术的视频,对此有了更深入的了解。在我们的日常生活中,二维码的应用场景无处不在,如超市支付、系统登录、应用下载等。掌握二维码的原理,不仅能为技术人员提供新的思路,对非技术人员来说,也能更好地识别生活中的各种二维码,防止上当受骗。
二维码已经深深地融入了我们的日常生活。购物扫码,吃饭扫码,坐公交也扫码。在频繁扫码的过程中,大家可能会有许多疑问:这个二维码安全吗?我的个人信息会不会?更进一步的思考是,我的系统是否可以推出自己的二维码来推广呢?
这时候,了解二维码背后的技术和逻辑就十分必要了。
二维码登录是其中一种最常见的应用场景,通过移动端应用扫描PC或WEB端的二维码来登录同一系统。比如手机微信扫码登录PC端微信,手机淘宝扫码登录PC端淘宝。那么,二维码登录是如何操作的呢?
从本质上讲,二维码登录也是一种登录认证方式。既然是登录认证,主要涉及的两件事就是:告诉系统我是谁,以及向系统证明我是谁。例如,账号密码登录中,账号是告诉系统我是谁,密码是向系统证明我是谁;手机验证码登录中,手机号是告诉系统我是谁,验证码是向系统证明我是谁。
那么,扫码登录是如何实现这两件事的呢?
在手机端应用扫描PC端的二维码后,手机端确认后,账号就在PC端成功登录。PC端登录的账号必然与手机端是同一账号。那么,如何告诉系统我是谁呢?通过扫描二维码,把手机端的账号信息传递到PC端。至于信息是如何传递的,我们后面再详细解释。
接下来是向系统证明我是谁的问题。在扫码登录过程中,用户并没有输入密码、验证码或其他任何形式的码。那么,是如何证明的呢?有些同学可能会想到,是不是扫码过程中把密码传到了PC端?但实际上这是不可能的,因为这样太不安全了,客户端也不会存储密码。实际上,手机端APP已经登录过,也就是说手机端已经通过登录认证。只要扫码确认是这个手机且是这个账号操作的,就能间接证明身份。
在了解二维码登录的本质之前,我们需要先认识一下二维码。在此之前,我们先看看一维码,也就是超市里的条形码。条形码其实是一串数字,存储了商品的序列号。二维码与条形码类似,但存储的不一定是数字,还可以是任何字符串。可以说,它是字符串的另一种表现形式。
通过搜索引擎,我们可以找到很多在线生成二维码的工具网站。这些网站可以提供字符串与二维码之间的转换功能。认识了二维码之后,我们再来了解一下移动互联网下的系统认证机制。
前面提到,为了安全考虑,手机端是不会存储你的登录密码的。但在日常使用过程中,我们注意到,只有在应用第一次下载登录时,才需要输入账号密码。之后即使应用进程被杀死或手机重启,也能自动登录。这背后就是一套基于token的认证机制。
账号密码登录时,客户端会将设备信息一起传递给服务端。如果账号密码校验通过,服务端会将账号与设备进行绑定,存在一个数据结构中,这个数据结构包含了账号ID、设备ID、设备类型等。然后服务端会生成一个token,用于映射这个数据结构。这个token其实是一串有特殊意义的字符串,通过它可以找到对应的账号与设备信息。
客户端得到这个token后,需要进行本地保存,每次访问系统API都携带上token与设备信息。服务端通过token找到与它绑定的账号与设备信息,比较客户端传来的设备信息,如果相同则校验通过,返回API响应数据;如果不同则校验不通过拒绝访问。
从上述流程可以看出,客户端不会也没必要保存密码。有些同学可能会想,如果token被别人知道了怎么办?实际上即使别人知道了token也没用,因为设备信息是唯一的。只要你的设备信息别人不知道,别人就无法用其他设备来访问你的账号信息。可以说客户端登录的目的就是获得属于自己的token。那么在扫码登录过程中PC端是如何获得属于自己的token呢?不可能手机端直接把token给PC端使用因为token只能属于某个客户端私有其他人或其他客户端是无法使用的在分析这个问题之前我们先梳理一下扫描二维码登录的一般步骤这可以帮助我们理清整个过程的大致思路扫描二维码登录的一般步骤大概包括以下几个环节扫码前手机端应用已登录状态PC端显示一个二维码等待扫描手机端打开应用扫描PC端的二维码扫描后提示已扫描请在手机端点击确认用户在手机端点击确认后PC端登录就成功了可以看到二维码在中间有三个状态等待扫描已扫描待确认已确认那么可以想象二维码的背后一定存在一个唯一性的ID当二维码生成时这个ID也一起生成并且绑定了PC端的设备信息手机去扫描这个二维码时二维码切换为已扫描待确认状态此时就会将账号信息与这个ID绑定当手机端确认登录时它就会生成PC端用于登录的token并返回给PC端到这里基本思路就已经清晰了接下来我们把整个过程再具体化一下首先是二维码的准备过程首先是等待扫描状态用户打开PC端切换到二维码登录界面时PC端向服务端发起请求告诉服务端我要生成用户登录的二维码并且把PC端设备信息也传递给服务端服务端收到请求后它生成二维码ID
