前后端身份认证

概述

1.什么是身份认证

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

例如:在Web开发中,涉及到用户身份的认证,例如:各大网站的手机验证码登录、邮箱密码登录,二维码登录等。

2.为什么要身份认证

HTTP是一种无状态的协议,为了分辨链接是谁发起的,需要浏览器自己去解决这个问题。有些情况下即使是开同一个网站的不同页面也都要重新登录,很麻烦,Cookie、Session和Token就是为了解决这个问题而提出来的两个机制。

Session认证机制

1.HTTP协议的无状态性

了解Http协议的无状态性是进一步学习Session认证机制的必要前提

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

2.如何突破HTTP无状态的限制

当你登录成功之后,服务器向客户端颁发一个cookie,而这个cookie就是身份验证的标识

3.什么是Cookie

Cookie是存储在用户浏览器中的一段不超过4KB的字符串。它由一个名称,一个值和其他几个用户控制Cookie有效期,安全性,适用范围的可选属性组成

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

Cookie的几大特性

(1)自动发送    (2)域名独立   (2)过期时限  (2)4KB限制

4.Cookie在身份认证中的作用

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

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

前后端身份认证_第1张图片

5.Cookie不具有安全性

由于Cookie是存储在浏览器中的,而且浏览器也提供了读写Cookie的API,因此Cookie很容易被伪造,不具有安全性。因此不建议服务器将重要的隐私数据,通过cookie的形式发送给浏览器。

注意:千万不要使用 Cookie 存储重要且隐私的数据!比如用户的身份信息、密码等

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

Cookie+Cookie认证

7.Session的工作原理

前后端身份认证_第2张图片

JWT认证机制

1.了解Session 认证的局限性

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

注意:

  • 当前端请求后端接口不存在跨域问题的时候,推荐使用 Session 身份认证机制
  • 当前端需要跨域请求后端接口的时候,不推荐使用 Session 身份认证机制,推荐使用JWT 认证机制

2.什么是JWT

JWT (英文全称: JSON Web Token) 是目前最流行的跨域认证解决方案

3.JWT的工作原理

前后端身份认证_第3张图片

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

4.JWT的组成部分

JWT 通常由三部分组成,分别是 Header (头部)、Payload (有效荷载)、Signature (签名)者之间使用英文的“”分隔,格式如下:

前后端身份认证_第4张图片

下面是JWT字符串的示例:

前后端身份认证_第5张图片

5.JWT 的三个部分各自代表的含义

JWT的三个组成部分,从前到后分别是 Header、Payload、Signature。

其中:

  • Payload 部分才是真正的用户信息,它是用户信息经过加密之后生成的字符串
  • Header 和 Signature 是安全性相关的部分,只是为了保证 Token 的安全性

       前后端身份认证_第6张图片

6.JWT的使用方式

客户端收到服务器返回的JWT 之后,通常会将它储存在 localStorage sessionStorage 中。

此后,客户端每次与服务器通信,都要带上这个JWT 的字符串,从而进行身份认证。推荐的做法是把JWT 放在 HTTP请求头的 Authorization 字段中,格式如下:

前后端身份认证_第7张图片

 7.定义 secret 密钥

为了保证JMT 字符串的安全性,防止MT 字符串在网络传输过程中被别人破解,我们需要专门定义一个用于加密解密的 secret 密钥:

  • 当生成JWT 字符串的时候,需要使用 secret 密钥对用户的信息进行加密,最终得到加密好的JWT 字符串
  • 当把JWT 字符串解析还原成JSON对象的时候,需要使用 secret 密钥进行解密

你可能感兴趣的:(javascript,网络,网络协议,服务器)