【博学谷学习记录】超强总结,用心分享|身份认证

      http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认证。

    身份认证(Authentication)是指通过一定的手段,完成对用户身份的确认。

目的:为了确认当前所声称为某种身份的用户,确实是所声称的用户。

身份认证方案:

Session 认证机制(服务端渲染推荐)

JWT 认证机制(前后端分离推荐)

一、Session 认证机制

原因:HTTP 协议的无状态性。

    HTTP 协议的无状态性,指的是客户端的每次HTTP请求都是独立的,连续多个请求之间没有直接的关系,服务器不会主动保留每次HTTP请求的状态。

解决:Cookie

    Cookie 是一段不超过 4KB 的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制 Cookie有效期、安全性、使用范围的可选属性组成。

    不同域名下的 Cookie 各自独立,每当客户端发起请求时,会自动把当前域名下所有未过期的 Cookie 一同发送到服务器。

1.Cookie 工作原理:

    在身份认证中,客户端第一次请求服务器的时候,服务器通过响应头的形式,向客户端发送一个身份认证的 Cookie,客户端会自动将 Cookie 保存在浏览器中。随后,当客户端浏览器每次请求服务器的时候,浏览器会自动将身份认证相关的 Cookie,通过请求头的形式发送给服务器,服务器即可验明客户端的身份。

    但是,浏览器中提供了读写 Cookie 的 API,因此,存储在浏览器中的 Cookie 很容易被伪造,不具有安全性。千万不要使用Cookie存储重要且隐私的数据!故能够在服务端验证 Cookie 的 Session 重要性不言而喻。

二、JWT认证机制

      JWT属于无状态认证,支持集群化部署,服务端可以任意迁移,减少服务端存储session压力,多平台跨域。流程:用户发送用户名和密码,服务端验证成功后用户信息加密并且编码成一个 token给客户端,客户端每次请求携带token,服务端接收请求时会解密token再验证token是否有效,获取用户登录信息,再根据授权获取受保护的资源。验证token不通过的情况有很多,比如签名不正确,无权限等

1、JWT组成结构

  jWT由三段字符串和两个点号组成,如(xxxxxx.yyyyy.zzzzz)

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

2、如何使用JWT?

  使用JWT之后,当用户使用它的认证信息登录系统之后,会返回给用户一个JWT, 用户只需要本地保存该  token(通常使用localStorage,也可以使用cookie)即可。

  当用户希望访问一个受保护的路由或者资源的时候,通常应该在 Authorization 头部使用 Bearer 模式添加JWT,其内容格式:

Authorization: Bearer <token>

  因为用户的状态在服务端内容中是不存储的,所以这是一种无状态的认证机制。服务端的保护路由将会检查请求头 Authorization 中的JWT信息,如果合法,则允许用户的行为。由于JWT是 自包含的,因此,减少了需要查询数据库的需要。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。