持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
在做项目的时候登录验证的效果我们是很经常实现的,那么常见的登录实现到底有哪些,具体流程又是怎么样呢?我们今天来一同看看。
cookie验证
我们知道http是无状态的协议,所以为了维护已登录这个状态,我们就需要cookie或者session来实现,cookie就是服务器发送给用户浏览器,并保留在客户端的一小块数据,下次再次请求的时候会继续携带这个cookie,那么服务器就能凭借这个来断定用户的身份和状态了。
session验证
session可以说是基于cookie进行实现的,我们来看一下下面这个实现流程图:

区别于cookie,session实现的状态认证是将信息存储在服务器中,把sessionId传递给客户端,存储在cookie中,以后每次请求都会携带这个sessionId来进行查询,这样我们就实现了状态的保留和身份的认证。
token验证
我们通过上面的介绍可以发现,cookie是将我们的信息存在了客户端,而session是将其存在了我们的服务器端,这就使得session比cookie更加安全,但是大量的session存在服务器又会给服务器带来压力,这时候一种新的验证方式就出来了---token。token我们称之为令牌,每次在请求接口的时候我们都要携带正确的token才能进行接口的请求,常见的token组成就是token描述+用户信息+签名,我们来看一下它的验证流程:

可以看到我们先进行登录验证,然后系统给我们颁发一个token令牌,之后我们将其保存在客户端,之后只要token没有过期,我们就可以拿着token去请求接口,服务器对token进行查库,同时验证token的有效性,这样我们就完成了身份的验证。很显然token相比较与session就不用存储状态在服务器端了,安全性同时也得到了提高,应为每次请求都有进行签名,防止了一定的攻击。
JWT验证
JWT全称为JSON WEB TOKEN,我们来看一下它的验证流程:

我们可以看到上述的流程图不是和token验证那一套一样吗?那为啥还要推出这个JWT?其实token和JWT验证有很多地方是一样的,但是有个很不一样的点就是是否需要进行查库,之前说的token验证每次对返回的token都要重新进行查库处理,但是JWT是不用的,其实直接将信息加密后存储在客户端,服务端只需要用到秘钥进行校验即可,如果解密成功,就说明了验证成功,不需要查询数据库。
二维码扫码登录原理
最后我们来看一下二维码扫码登录的原理

可以看到,首先在我们的PC端先请求获取对应的与设备信息绑定的二维码。之后服务器就一直轮询监听我们的二维码状态,当我们拿出手机进行扫码的时候。就会将扫描到的二维码信息和手机本身登录的信息一同发送给我们的服务器,服务器进行验证后就返回token给手机,如果手机点击确定,那么就会携带token到服务器进行更新状态,此时PC端的状态改为已确定并获得服务器颁布的token之后就可以凭借token进行验证了。