点击上面的“ Code”,选择“”
她是前浪还是后浪有关系吗?
能浪的就是好浪!
文章每天10点33分更新,每天都有亿万根头发脱落……
源码精品专栏
前几天在极客时间上看了一个二维码视频。写得很好。我在这里总结一下。
在日常生活中,二维码出现在很多场景中,比如超市支付、系统登录、应用程序下载等。了解二维码的原理可以为技术人员在选择技术时提供新的思路。对于非技术人员来说,除了澄清疑虑外,还可以指导他们更好地识别生活中遇到的各种二维码,防止上当受骗。
二维码大家都很熟悉。
购物扫二维码,吃饭扫二维码,乘车扫二维码。
.jpeg
.png
在扫码的过程中,您可能会有疑问:这个二维码安全吗?我的个人信息会被泄露吗?更深入的用户还会考虑:我是否也可以创建一个二维码来推广我的系统?
这时候你就需要了解二维码背后的技术和逻辑了!
二维码最常用的场景之一是通过移动应用程序在PC端或WEB端扫描二维码登录同一系统。例如,在手机上扫描微信二维码可在PC上登录微信,在手机上扫描淘宝上的二维码可在PC上登录淘宝。那么我们就来看看二维码登录是如何进行的吧!
二维码登录本质上是一种登录认证方式。既然是登录认证,那么就只有两件事了!
告诉系统我是谁
向系统证明我是谁
例如,使用账号和密码登录时,账号告诉系统我是谁,密码向系统证明我是谁;例如,使用手机验证码登录时,手机号码告诉系统我是谁,验证码向系统证明我是谁;
那么通过扫描二维码登录如何做到这两件事呢?我们一起想一下
使用手机App扫描PC端二维码。手机端确认后,PC端账户登录成功!这里,PC端登录的账号必须与手机端登录的账号一致。在手机上用A账户无法登录,扫描二维码登录后,在PC上登录了B账户。
所以,首先就是告诉系统我是谁,这样就比较清楚了!
通过扫描二维码,将手机上的账户信息传输到PC上。至于如何转移,我们稍后再说。
第二件事是向系统证明我是谁。在二维码登录过程中,用户没有输入密码、验证码或任何其他代码。这是如何证明的?
有同学可能会疑惑,扫描过程中密码是否传输到PC上呢?但这是不可能的。因为这样太不安全了,客户端根本不会存储密码。我们仔细想一想,其实手机APP已经登录了,也就是说手机已经通过了登录认证。只要我扫码确认是这部手机,是这个账号操作的,其实就可以间接证明我是谁。
基于Boot+Plus+Vue实现的后台管理系统+用户小程序,支持RBAC动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
那么如何确认呢?我们稍后会详细解释,但在此之前我们需要先了解一下二维码!在了解二维码之前,我们先来了解一下一维码!
.png
所谓一维码就是条形码,超市里的条形码——相信大家对此都非常熟悉。条形码实际上是一串数字,存储了产品的序列号。
二维码实际上与条形码类似,只不过它不一定存储数字,也可以是任何字符串。您可以将其视为字符串的另一种表示形式。
在搜索引擎中搜索二维码,可以找到很多在线生成二维码的工具网站。这些网站都可以提供字符串和二维码转换的功能,比如饲料二维码网站。
206.jpg
您可以在左侧的输入框中输入您的内容。可以是文本、URL、文件……然后就可以生成代表它们的二维码
你还可以上传二维码并“解码”,然后就可以解析出二维码的含义。
基于+++++Vue实现的后端管理系统+用户小程序&支持RBAC动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
了解了二维码,我们再来看看移动互联网下的系统认证机制。
正如我们之前所说,出于安全考虑,它不会在手机上存储您的登录密码。但在日常使用中,我们要注意的是,只有下载应用程序后首次登录时,才需要使用帐号和密码登录。之后,即使应用程序进程被杀,或者手机重启时,也无需再次输入账号密码,即可自动登录。
其实这背后是一套基于.我们来看看这个机制是如何运作的。
阿萨德阿萨德.jpg
当使用账号和密码登录时,客户端会将设备信息传递给服务器。
如果账号密码验证通过,服务器会将账号与设备绑定并存储在数据结构中。该数据结构包含账户ID、设备ID、设备类型等。
const token = {
acountid:'账号ID',
deviceid:'登录的设备ID',
deviceType:'设备类型,如 iso,android,pc......',
}
然后服务器会生成一个并用它来映射数据结构。这实际上是一个具有特殊含义的字符串。它的含义是通过它可以找到对应的账户和设备信息。
客户端获取到后需要保存在本地,并在每次访问系统API时携带设备信息。
服务器可以找到与其绑定的账户和设备信息,然后将绑定的设备信息与客户端每次发送的设备信息进行比较。如果相同,则验证通过,返回AP接口响应数据。如果不同,则说明验证失败,拒绝访问。
从前面的流程我们可以看出,客户端没有也不需要保存你的密码。相反,确实如此。有的同学可能会想,这这么重要,万一被别人发现了怎么办?其实知道也没关系,因为设备信息是唯一的。只要别人不知道你的设备信息,而别人使用其他设备访问,验证就不会通过。
可以说,客户端登录的目的就是为了获取自己的。
那么在扫描二维码登录的过程中,PC端是如何获取自己的呢?手机端不可能直接用自己的电脑端的!它只能是某个客户私有的,不能被其他人或其他客户使用。在分析这个问题之前,我们需要先梳理一下扫描二维码登录的大致步骤,这样可以帮助我们梳理整个流程,
啊啊啊.jpg
扫码前,手机应用程序已登录,PC端会显示二维码,等待扫描。
在手机上打开App,扫描PC上的二维码。扫描完成后会提示“已扫描,请在手机端点击确认”
用户在手机上点击“确认”。确认后,PC登录成功。
可以看到,二维码中间有三种状态,等待扫描、扫描等待确认、确认。所以可以想象
666.jpg
二维码背后必须有一个唯一的ID。生成二维码时,也会生成此 ID,并与 PC 上的设备信息绑定。
用手机扫描此二维码
二维码切换到已扫描待确认状态,账户信息将与该ID绑定。
当移动端确认登录时,会生成用于登录的PC端,并返回给PC端。
好了,现在基本思路已经清楚了,接下来让我们把整个过程说得更具体一些。
看二维码的不同状态,首先是等待扫描状态,此时用户打开PC,切换到二维码登录界面。
1111.jpg
PC向服务器发起请求,告诉服务器我要生成用户登录的二维码,并将PC设备信息传递给服务器。
服务器收到请求后,生成二维码ID,并将该二维码ID与PC设备信息绑定。
然后将二维码ID返回给PC
PC收到二维码ID后,生成二维码(二维码必须包含ID)
为了及时获知二维码的状态,客户端显示二维码后,PC会不断轮询服务器,例如每秒一次,请求服务器告知当前二维码的状态及相关信息。
二维码已准备就绪,现在可以扫描它
7777.jpg
用户使用手机扫描PC上的二维码,通过二维码内容获取二维码ID。
然后调用服务器API将移动终端的身份信息和二维码ID发送到服务器。
服务器收到后,可以将身份信息与二维码ID绑定,生成临时的。然后返回手机
由于PC端一直在轮询二维码状态,如果此时二维码状态发生变化,可以更新界面上扫描到的二维码状态。
那么为什么我们需要给手机还一个临时的呢?就像临时一样,它也是一种身份凭证。不同的是只能使用一次,使用后就失效。
返回第三步中的临时,以便手机下一步可以作为凭证使用。这样可以保证扫描二维码和登录两步操作是从同一部手机发出的。
最后一步是确认状态。
.jpg
收到临时信息后,手机会弹出确认登录界面。当用户点击确认时,手机会携带用于调用服务器的临时接口,告诉服务器我已经确认了
服务器收到确认后,根据二维码ID绑定的设备信息和账户信息生成用户的PC端登录信息。
此时,通过PC端的轮询接口,可以知道该二维码的状态已变为“已确认”。并且可以从服务器获取用户登录信息
至此,登录成功,可以使用后端PC访问服务器端资源。
扫码的基本流程已经讲解过了,但是有些细节还没有深入介绍。
例如,二维码的内容是什么?
在扫描二维码确认的步骤中,如果用户取消了怎么办?这些细节留给大家思考
.jpg
我们从登录的本质出发,探讨如何通过扫描二维码登录。
告诉系统我是谁
向系统证明我是谁
在这个过程中,我们首先简单讲了两个必备知识,
那么我们以二维码状态为轴,分析其背后的逻辑:扫码登录是通过认证机制和二维码状态变化来实现的。
需要指出的是,上述登录流程适用于同一系统的PC端、WEB端、移动端。
我们平时还有一个比较常见的场景,就是通过第三方应用扫描二维码登录。比如极客时间/掘金可以选择通过微信/QQ扫描二维码登录,那么这种通过第三方应用扫描二维码登录的原理是什么呢?
有兴趣的同学可以思考、研究一下。欢迎您在评论区留下您的意见。
欢迎加入我的知识星球讨论架构、交流源码。长按下方二维码即可加入:
知识星球更新后的源码分析如下:
《土豆入门2》系列。
提供了近3W行代码的示例,以及超过4W行代码的电商微服务项目。