赞
踩
什么使无状态协议?
就是这一次请求和上一次请求是没有关系的,互不认识的,没有关联的。这种无状态的好处是快速。
由于http的无状态性,为了使某个域名下的所有网页能够共享某些数据,session和cookie出现了。
客户端访问服务器的流程如下
首先,客户端会发送一个http请求到服务器端
服务器端接受客户端请求后,建立了一个seesion,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionid。Set-Cookie格式
如下,具体请看Cookie详解
Set-Cookie:value[;expires=date][;domain=domain][;path=path][;secure]
在客户端发起的第二次请求,加入服务器给了set-Cookie,浏览器会自动在请求头中添加cookie
服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KfghAOwS-1634015103982)(C:\Users\hp\Documents\分布式\图片\image-20210930141919710.png)]
注意:
session有如用户信息档案表,里面包含了用户的认证信息和登录状态等信息。而cookie就是用户通行证
token 也称作令牌,由uid+time+sign[+固定参数]
token的认证方式类似于临时的证书签名,并且是一种服务端无状态的认证方式,非常适合于REST API的场景,所谓无状态就是服务端并不会保存身份认证相关的数据。
token在客户端一般存放于localStorge,cookie,或sessionStorage中。在服务器一般存于数据库中
token的认证流程于cookie很相似
因为form发起的POST请求并不受到浏览器同源策略的限制,因此可以任意的使用其他域的Cookie像其他域发送POST请求,形成CSRF攻击。在Post请求的瞬间,cookie会被浏览器自动添加到请求头中,但token不同,token是开发者,为了防范csrf而特别设计的令牌。浏览器不会自动添加到headers里,攻击者也无法访问用户的token,所以提交的表单无法通过服务器过滤,也就无法形成攻击。
session时有状态的,一般存在于服务器内存或盘中,当服务器采用分布式或集群时,session就会面对负载均衡问题。
而token是无状态的,token字符串里就保存了所有的用户信息
总结:
JWT 就是token的一种实现方式,并且基本是Java web领域的事实标准。
JWT全程是JSON WEB Token。基本可以看出是使用JSON格式传输token
JWT由3部分构成:
Header:描述JWT的元数据。定义了生成签名的算法以及Token的类型。
Payload:负载用来存放实际需要传递的数据
Signature:签名 服务器通过Payload、Hrader和一个密钥secret使用Header里面指定的签名算法(默认是HMAC SHA256)生成。
流程:
在基于Token进行身份验证的应用程序中,用户登录时,服务器通过Payload、Header和一个密钥secret创建令牌Token并将Token发送给客户端。
然后客户端将Token保存在Cookie或者localStorage里面,以及客户端发出的所有请求都会携带这个令牌。你可以把她存放在Cookie里面自动发送,但是这样不能跨域,所以更好的做法是放在HTTP Header 的Authorizetion字段中:Authorization:你的Token
ocalStorage里面,以及客户端发出的所有请求都会携带这个令牌。你可以把她存放在Cookie里面自动发送,但是这样不能跨域,所以更好的做法是放在HTTP Header 的Authorizetion字段中:Authorization:你的Token
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。