session认证机制需要配合cookie才可以实现、但是cookie默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口时,需要做很多额外的配置,才能实现跨域session认证——比较麻烦
jwt是目前最流行的跨域认证解决方法,工作原理
浏览器 服务器
浏览器提交账号和密码给服务器 服务器验证账号和密码
验证通过,服务器将用户的信息对象,经过加密生成Token字符串
· Token字符串服务器不会保留,直接响应给客户端
客户端将token字符串(已经加密的用户信息),
存储到LocalStorage或SessionStorage中
客户端需要再次发送请求的时候,
通过请求头的Authorization字段,将Token发给服务器
服务器把token字符串还原成用户的信息对象
用户的身份认证成功后,服务器对当前的用户
生成特定的响应内容
服务器响应,把当前用户的对应内容响应给浏览器
用户信息通过token字符串的形式,保存在客户端浏览器中,服务器通过还原token字符串的形式来认证用户的身份。
在session中用户的信息保存在服务器中,在jwt中用户的信息保存在客户端中
JWT的组成部分:头部(Header)、有效荷载(Payload)、签名(Signature) 三者之间使用英文的.分隔。类似于:Header.Payload.Signature
Payload:是真正的用户信息,它是用户信息经过加密之后生成的字符串
Header、Signature是安全性相关的部分,是为了保证Token的安全性
客户端收到服务器返回的JWT之后,通常会将它存储在localstorage或sessionStorage中,此后,客户端每次与服务器通信,都要带上JWT字符串,从而进行身份认证。推荐做法将JTW放在HTTP请求头的authorization字段中,(在请求头中携带JWT身份认证字段)
格式如下
Authorization:Bearer空格