Cookie Session Token JWT 理解

264 阅读3分钟

Cookie

Cookie是服务器发送到用户浏览器并保存在本地的一块数据区域。
拆开来说:
Cookie是客户端的一块存储区域。
这块存储区域中的值是可以由服务端来赋值的。
Cookie中的数据会随着客户端的请求发往服务端
另外,Cookie不允许跨域,每个cookie会绑定单一域名,但一级域名和二级域名可以通过domian实现共享

开发者模式-Application-Cookies 下图实例

Session

是一种记录客户端与服务端会话状态的机制,基于cookie实现,
在cookie中存储JSESSIONID(会话的标识),服务端存储session的具体内容(开发者自定义)

Token

是一种访问资源的凭证
客户端携带token到服务端访问资源,服务端解析token判断当前请求是否具有权限
token存储于客户端,可以存于Cookie也可以存于localStorage
token可以作为参数传到服务端,也可以放在Cookie中发往服务端

基本流程:
用户登录-服务端将用户相关信息加密为token串返回给客户端-客户端存储在本地
-客户端请求资源时携带token-服务端解析token判断是否具有访问权限

JWT (JSON Web Token)

一种跨域认证的解决方案。

基本原理:认证通过后,服务端生成JWT串,客户端与服务端通信时携带该串
(看上去跟token差不多,但注意区分一下,token是指的令牌,而JWT是一种解决方案
JWT的格式、加密方式、以及传输方式都是规范化的,我们可以把服务端生成的JWT串称之为TOKEN)

为了解决Cookie不能跨域的问题,我们把令牌jwt串放在HTTP的请求头信息Authorization中
形如:Authorization: Bearer <token>

JWT的几个特点:

(1)JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。

(2)JWT 不加密的情况下,不能将秘密数据写入 JWT。

(3)JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。

(4)JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。

(5)JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。

(6)为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。

参考文章

juejin.cn/post/684490… www.ruanyifeng.com/blog/2018/0…