什么是用户认证:用户认证(Authentication),指的是验证用户的身份,例如你希望以小A的身份登录,那么应用程序需要通过用户名和密码确认你真的是小A。

为什么要做用户认证:因为http协议是无状态的,每一次请求都无状态。当一个用户通过用户名和密码登录了之后,他的下一个请求不会携带任何状态,应用程序无法知道他的身份,那就必须重新认证。因此我们希望用户登录成功之后的每一次http请求,都能够保存他的登录状态。

怎么做用户认证:sessin架构和jwt架构都是用来做用户认证的主流方法

基于session架构的用户认证: 

1.session是什么

session是一种服务器机制,是存储在服务器上的信息。存储方式多种多样,可以是服务器的内存中,或者是mongo数据库,redis内存数据库中。而session是基于cookie实现的(服务器会生成sessionID)通过set-cookie的方式写入到客户端的cookie中。每一次的请求都会携带服务器写入的sessionID发送给服务端,通过解析sessionID与服务器端保存的session,来判断用户是否登录。

2. 认证流程如下图所示:

sessin和jwt架构介绍_session

3. 缺点:

①session本质是存在文件里面,会占用机器的存储。

②可扩展性不好:当做一些横向的扩展时,比如需要好几台server,session就不好进行管理,需要专门存储session的server(好像是用redius来做的,咱也不太懂)

③如果是前端分离的项目,前端的静态资源服务和后端的接口可能不在同一个域名下,这就导致了服务器无法在浏览器上写入cookie。需要通过设置CORS解决。前后端都需要额外的设置,

【④前后端没有分离的时候应该用的session架构,session架构应该不好做跨域】

基于JWT架构的用户认证:

1.JWT是什么

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

2. JWT的认证原理

一个jwt实际上就是一个字符串,它由三部分组成,头部载荷签名,这三个部分都是json格式。

3. 认证流程如下图所示:

sessin和jwt架构介绍_用户认证_02

4. 优点

①前后端代码完全分离

②可扩展性好 :应用程序分布式部署的情况下,session需要做多机数据共享,通常可以存在数据库或者redis里面。而jwt不需要。

③容易做跨域

​​用户认证:session和JWT的区别_这里是蒋丞选手的博客-wt和session的区别​​