扫码登录,背后是如何实现的?

引言

        近年来,随着智能手机和移动支付的普及以及互联网应用的不断更新迭代,扫码登录已经成为了我们日常生活中非常普遍的登录方式。扫码登录能够迅速的成为我们各大网站常用的登录方式一定存在它的原因。

        首先一个非常重要的原因,扫码登录还可以提高用户的使用体验。在过去,我们需要记住各种复杂的用户名和密码,然后花费很多时间输入这些信息才能完成登录。有了扫码登录以后,我们只需要用手机扫描二维码即可完成登录,非常方便快捷。这大大提高了用户的使用体验,并且可以帮助企业增加用户黏性。

        其次,扫码登录的出现是可以提高用户安全性。相比于传统的用户名密码登录方式,扫码登录更加安全且不容易被黑客攻击。因为每个二维码都是独一无二的,只有在扫描正确的二维码之后才能完成登录,这使得扫码登录成为了一种优秀的身份验证方式,可以有效地降低账户被盗风险。

        此外,扫码登录也有助于推进数字化时代的发展。在数字化时代,我们需要更快速、更高效、更安全的登录方式来保障我们的账户安全,扫码登录正是应对这个需求而出现的。

        但是你知道扫码登录背后的原理么,本文参考了一些优秀的文章,带你一起来了解一下扫码登录是如何实现的。

二维码简介

二维码的生成

        二维码是一种用于存储数据的二维图形码,由黑白色块组成,具有快速扫描和识别的特点。与传统的条形码相比,二维码可以存储更多的信息,并且可以容错,即在一定程度上损坏时仍能正确读取。

        制作二维码可以使用二维码生成器软件或在线生成器网站,目前国内最常用的二维码生成网站为草料二维码。首先,在二维码生成器中输入要编码的内容,如网址、文本或联系方式等。随后,有的二维码生成器会让选择二维码的尺寸和纠错级别,通常越大的尺寸能够存储更多的信息,但也会增加扫描时间和空间消耗。纠错级别指的是二维码在损坏的情况下还能够被正确解码的能力,不同的纠错级别对应着不同的数据保护能力。最后,点击生成按钮即可得到一个彩色的二维码图像,可以保存到计算机或打印出来贴在物品上。

二维码的解析

        二维码的解析过程包括图像处理和数据解码两个部分。 首先是图像处理。当我们用手机或扫码器扫描二维码时,设备使用相机捕获图像,并通过算法进行预处理。首先,对图像进行二值化处理,将彩色图像转换为黑白二值图像。接着,进行边缘检测,找到二维码中的定位点和编码区域。然后,进行透视变换,将二维码区域校正为一个矩形图像。最后,进行图像分割,将矩形图像分成若干小块,并提取出每个小块中的黑白格子信息。

        接下来是数据解码。在图像处理完成后,就可以对二维码中的数据进行解码了。解码过程需要依据二维码的编码规则,对每个小块中的黑白格子进行解析。通常,二维码采用的编码方式是汉明码或 RS 码。这些编码方式可以实现数据的纠错和自动识别。在解码的过程中,还需要考虑二维码的版本、纠错等级、编码方式等因素,以保证解码的准确性和稳定性。当解码完成后,设备将得到一个包含原始数据的字符串。

系统认证的本质

用户无论是通过扫码的方式登录还是使用账号密码进行登录,都是为了做两件事:

  1. 告诉系统我是谁
  2. 向系统证明我就是我

比如账号密码登录,账号就是告诉系统我是谁, 密码就是向系统证明我是谁; 比如手机验证码登录,手机号就是告诉系统我是谁,验证码就是向系统证明我是谁。

        我们在日常登录网站时,其实是不需要每次访问都输入账号密码的,大多数情况都是第一次在浏览器访问这个网站的时候需要登录,后面很长一段时间再使用这个设备以及这个浏览器进行这个网站访问的时候其实不需要进行扫码或者输入账号密码。难道是扫码过程中,或者第一次输入密码后,我们的手机或者电脑把密码缓存到本地,后续再进行访问的时候直接将本地的密码发送过去了么?其实仔细想想这样不太可能,因为这样太不安全的,黑客很容易窃取的你的设备本地缓存的各种密码。

        其实目前大多数的系统登录认证是基于token认证进行实现的,它通过使用特定的算法将用户凭证转换为安全令牌,并将其传递给客户端应用程序。该令牌通常包含有关用户和会话状态的信息,以便在应用程序的后续请求中进行身份验证和授权。这种身份验证机制的本质是使用户能够在不直接向服务器发送凭证的情况下访问受保护的资源。相反,一旦用户被验证通过,该系统生成一个加密的Token,并将其返回给客户端应用程序。客户端应用程序随后将此Token附加到每个后续请求中,并在必要时将其提供给服务器进行验证。

        看了上面的介绍,你是否还是对token是什么比较懵,下面我会再简单介绍一下。

Token是什么

        Token,又被称为令牌,是一种在计算机系统中广泛使用的安全令牌,用于身份验证和授权。通常情况下,Token是由服务器生成的一个随机字符串,Token会和用户的账号信息以及设备信息进行关联。在进行认证服务时,Token通过客户端应用程序传递到服务器上,以表明其已被验证过且有权访问某些资源。Token通过解决身份验证和授权问题,为现代计算机系统提供了更强大的安全性和可靠性。

        为什么需要Token呢?在过去,很多计算机系统采用基于Cookie或Session的身份验证机制进行用户认证和授权。然而,这种机制存在很多缺点,如Cookie可能被窃取或篡改,而Session则需要在服务器上维护一定的状态信息,从而导致负载增加和服务器性能下降等问题。与之相比,Token是一种更高效、更安全、更灵活的身份验证和授权机制,它不依赖于服务器上的状态信息,并且可以跨越多个域和应用程序使用。

基于 token 的认证机制流程步骤大致如下:

  1. 首次登录时,客户端应用程序向服务器发送用户名、密码、设备信息等凭证,以请求身份验证。
  2. 服务器验证用户凭证是否正确,并生成一个Token。此Token通常包含有关用户和会话状态的信息,例如用户ID、设备id等。这个token本质上其实就是一串有着特殊意义的字符串,它的意义就在于,通过它可以找到对应的账号与设备信息。
  3. 服务器将该Token进行加密,并将其返回给客户端应用程序作为响应。客户端应用程序随后将此Token存储在本地,以备后续请求使用。
  4. 在后续的每个请求中,客户端应用程序会将该Token附加到HTTP请求参数中,并将其发送到服务器。
  5. 服务器接收到请求后,解密并验证该Token的有效性。如果Token有效,则相应的操作被授权通过,并且服务器响应与请求相关的数据。
  6. 如果Token无效或已过期,则服务器将拒绝请求,并返回相关的错误信息。

        从前面这个流程,我们可以看到,客户端不会也没必要保存你的密码,相反,它是保存了token。可能有些同学会想,这个token这么重要,万一被别人知道了怎么办。实际上,知道了也没有影响, 因为设备id是唯一的,只要你的设备信息别人不知道, 别人拿其他设备来访问,验证也是不通过的。可以说,客户端登录的目的,就是获得属于自己的token。 关于设备id的内容可以参考这篇文章:傻傻分不清楚?带你了解设备id

扫码登录原理

        介绍完token我们前置的知识也就够了,接下来我们切回正题,继续来聊扫码登录。

        回忆一下,我们在进行扫码登录过程中,一般二维码经历了三个状态:待扫描、已扫描待确认、已确认:

  1. 扫码前,手机端应用是已登录状态,PC端显示一个二维码,等待扫描
  2. 手机端打开应用,扫描PC端的二维码,扫描后,会提示"已扫描,请在手机端点击确认"
  3. 用户在手机端点击确认,确认后PC端登录就成功了

待用户扫码

        这个阶段的主要任务是生成二维码,这个步骤是在服务端和PC端之间进行,,不涉及移动端。PC端主要起到给服务端发送登录请求以及展示二维码的功能,服务端负责生成二维码ID。

        首先,用户在PC端选择扫码登录方式后,PC端需要向服务端发生用户登录的请求,告诉服务端用户想要通过扫码二维码的方式进行登录,你需要赶快生成一个二维码供用户扫码,在这个请求当中会携带PC端的设备信息。

        服务端收到请求后,会生成唯一的二维码 ID,你可以理解为 UUID,并且将 二维码ID跟PC设备信息关联起来,这跟移动端第一次登录有点相似。

        PC端接受到二维码 ID 之后,将二维码 ID 以二维码的形式展示,等待移动端扫码。此时在 PC 端会启动一个定时器,轮询查询二维码的状态。如果移动端未扫描的话,那么一段时间后二维码将会失效。

 

已扫描待确认

我们使用移动端扫描PC端的二维码以后,PC端的二维码状态就会变成『扫码成功,请按照手机端提示进行确认』。这个阶段主要是移动端跟服务端交互的过程。

  1. 首先,用户使用手机去扫描PC端的二维码,通过二维码获取到其中的二维码ID。
  2. 然后,移动端会调用服务端API将移动端的身份信息(告诉服务端我是谁)与二维码ID一起发送给服务端
  3. 接着,服务端接收到请求,将用户的身份信息与二维码ID进行绑定,生成一个临时的token,然后把这个临时token发送给移动端。临时token与token一样,不同的地方在于它只能用一次,用过就失效。
  4. 因为PC端一直在轮询二维码状态,一旦服务端二维码的状态发生了改变,它就可以在界面上把二维码状态更新为已扫描,告知用户扫码成功,提示用户进行确认操作。

        在第三步骤中返回临时token,为的就是手机端在下一步点击确认操作时,可以用它作为凭证,以此确保扫码,登录两步操作是同一部手机端发出的。

确认登录

最后一步,我们需要在手机上点击确认就可以成功登录了。

  1. 用户在手机上点击确认后,手机端会调用服务端的接口,告诉服务端我已经确认,这个过程会携带上一步收到的临时token。
  2. 服务端收到确认后,校验临时token,通过后将允许登录,然后根据二维码ID绑定的设备信息与账号信息,生成用户PC端登录的新token。
  3. PC端轮询到了二维码状态为登录状态,并且会获取到了生成的 token,完成登录。
  4. 后续,服务器端会跟手机端一样,维护着 token 跟二维码、PC 设备信息、账号等信息。后续PC端再进行访问都会基于新的token完成。

面试题

面试题:请你介绍一下我们使用手机扫码电脑上的二维码进行登录的原理。

答:

扫码登录过程中二维码有三个状态:待扫描、已扫描待确认、已确认。

待扫描阶段由PC端向服务端发起生成二维码的请求,并在请求中携带PC端的设备信息。服务端收到请求后会生成一个二维码ID发送给客户端进行响应,同时会将二维码ID与PC端设备信息绑定到一起。PC端收到二维码ID后会转换成二维码进行展示,供用户扫码,然后不断轮询服务端二维码的状态。

已扫描待确认阶段。移动端扫描PC端二维码获取二维码ID,将手机端登录的信息凭证(token)和 二维码 ID 作为参数发送给服务端。服务端接受请求后,会将 token 与二维码 ID 关联,然后生成一个临时token。PC端轮询到服务端二维码状态改变后,会变更二维码状态为已扫描待确认。

确认阶段。用户在移动端点击确认以后,会将确认登录请求以及临时token发送给服务端,然后端校验临时token以后会允许登录,然后生成PC端的新token。PC端轮训已确认登录,并且获取新的token,完成登录。后续PC端再登录直接通过token进行登录即可。 

参考文章:

二维码扫码登录是什么原理 - 掘金

​​​​​​聊一聊二维码扫描登录原理 - 掘金

猜你喜欢

转载自blog.csdn.net/zzu_seu/article/details/130176119
今日推荐