HTTP:
- http协议是无状态的协议,每次http请求都是一次全新的请求,服务器不会记住用户的身份信息。
- 网站登录之后服务器将登录识别标识(令牌)返回给客户端,客户端下次请求在将其回传给服务器,用于身份校验。
- 登录识别标识(令牌)一般存放在Cookie中或 localStorage 中。
Session
-
字面上的意思是会话的意思。我们可以理解为服务器上的Cookie。
-
Session比较容易丢失,当服务器重启或程序更新重启时,会全部丢失。所以后期一般将需要存储在Session中的会话信息存放到redis中。
JWT的简易实现思路 -
jwt组成:头部 + 载荷 + 签名
-
头部一般用来存储加密方式,令牌类型
-
载荷一般用户存储用户信息,以及令牌的过期时间,授权用户。
-
签名一般由头部与载荷MD5加密获得。
header { "alg":"HS256", "typ":"JWT"}
//alg:签名的使用算法
//typ:令牌的类型
payload { "iss":"www.baidu,com",exp:1600870059000 }
//iss:发行方
//exp:到期时间
//sub:主题
//aud:用户
//nbf:在此之前不可用
//iat:发布时间
.....
secret
MD5.Encode(Base64UrlEncode(header) + Base64UrlEncode(payload))
jwt
sha256(Base64UrlEncode(header) + "." + Base64UrlEncode(payload) +"." + secret)
注释:
1:JWT 默认不加密,但是可以加密之后把加密字符串传递给客户端,原文存放到redis中。
2:JWT 未加密时,一些重要数据不能通过JWT传输。
3:JWT 不仅可以用于用户身份认证,还可以用于信息交换,减少数据库访问次数。
4:JWT 一旦签发在有效期内一直有效,JWT的有效期不易过长。
实现步骤:
- 用户(客户端)首次登录向服务器发送用户名和密码。
- 服务校验用户身份信息,并生产JWT 或 加密后的JWT返回给客户端。
- 客户端接收JWT 或 JWT加密后的字符串,并存储到 Cookie 或 localStorage 中。
- 客户端再次发送请求时将 JWT 或 JWT加密后的字符串 存放到 Header Authorization 中返回给服务器。
- 服务器从Header Authorization取到 JWT 或 加密后JWT 校验用户身份并更新 JWT 或 JWT加密后的字符串给前端。
本文探讨了HTTP协议的无状态特性,以及如何通过令牌(如JWT)进行用户身份验证和信息交换,减少数据库访问。详细解析了JWT的组成、实现思路及优缺点。
2259

被折叠的 条评论
为什么被折叠?



