身份认证机制的简单理解

441 阅读3分钟

一. 不同开发模式下的身份认证

对于服务器端渲染前后端分离两种开发模式来说,分别有着不同的身份认证方案。

  • 服务端渲染 推荐使用 Session认证机制。
  • 前后端分离 推荐使用JWT认证机制。

二. Session 认证机制

1).http协议的无状态性:

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

2).打破http协议无状态性的限制

就是一种类似会员卡的身份验证方式,专业术语叫作Cookie。
http不知道你是会员,你自己出示会员卡证明自己是会员身份。

1. 什么是cookie

cookie是存储在客户端浏览器中一段不超过4kb的字符串,由名称、值和几个控制cookie有效日期、安全性、使用范围的可选属性组成。

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

2.cookie特性:
  • 自动发送
  • 不同域名下的cookie相互独立
  • 过期时限
  • 4kb限制
3.cookie在身份认证中的作用

客户端第一次请求服务器的时候,服务器通过响应头的形式,向客户端发送一个身份认证的cookie,客户端会自动将cookie保存在浏览器中。

随后,当客户端浏览器每次请求服务器的时候,浏览器会自动将身份认证相关的cookie发送给服务器,服务器即可验明客户端的身份。

4.Cookie不具备安全性

由于cookie存储在浏览器中,而且浏览器也提供了读写cookie的api,很容易被伪造,所以不具备安全性,非常不建议将重要的隐私数据,通过cookie形式发送给浏览器。

5.提高身份认证的安全性

服务器端在进行认证一下(知道这个概念即可)

6.session的工作原理

服务器端开一块内存 存请求的信息。浏览器端存一个简单的cookie(不包含隐私内容),过后在发送请求,查看服务器端内存中是否包含发送请求服务器的cookie内容对应的信息,有的话则成功。(隐私内容存储在服务器端)

JWT认证机制

session认证的局限性

session认证需要配合cookie实现。cookie默认是不支持跨域访问的,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域Session认证。

JWT工作原理

客户端登陆,提供帐号和密码;服务器端验证账号密码,验证通过后将用户信息加密之后生成token字符串,然后将token响应给客户端;客户端将token保存在笨的的sessionStorage或者localStorage中;客户端在发送请求时,通过请求头的Authorization,将token发送给服务器;服务器把token还原成信息对象,认证成功后,响应对应的内容给客户端。

总结:用户的信息通过token字符串的形式,保存在客户端浏览器中。服务器端通过还原token字符串的形式来认证用户身份。

JWT组成部分

JWT通常由三部分组成

  • Header 头部
  • Payload 有效负载
  • Signature 签名

三者间通过 . 分隔

Header.Payload.Signature

  • Padload部分是真正的用户信息,它是用户信息经过加密之后生成的字符串。
  • Header和Signature 是安全性相关的部分,只是为了保证token的安全性
JWT使用方式

客户端收到服务器返回的JWT后,通常会将其存储在loocalStorage 或者 sessionStorage中。
此后,客户端每次与服务器通信,都要带上这个JWT的字符串,从而进行身份验证。推荐做法是把JWT放在http请求头的Authorization字段中,格式如下:

Authorization:Bearer <token>