有状态登录和无状态登录详解

  • 一 有状态登录
  • 二 无状态登陆
  • 无状态登陆介绍:
  • 无状态token生成方式
  • 一 Jwt方式
  • 二 RSA256非对称加密方式
  • 三 区别与差异


一 有状态登录

有状态登录(Session): 传统上,我们会使用 Session 和 Cookie 来保存用户的授权信息。

第一步,登录过程,用户使用用户名和密码来登录系统,服务器会来验证用户名和密码是否正确,如果正确,服务器会给这个用户创建一个包含用户登录信息、角色、权限的一个叫做 Session 的东西,然后把这个 Session 保存起来,同时把这个 Session 的 ID 以 Cookie 的形式发送给前端,表示用户验证成功,登录完成了;

第二步,接下来如果用户希望访问某些资源,前端要向后端发起一个 HTTP 的请求,同时相应的 Cookie 也会跟随请求一起发送给服务器,而服务器取得 Cookie 以后就会去查找是否有 Session ID ,然后通过 Session ID 提取相应的 Session 来确定用户的身份与权限,如果 Session 与 ID 相符,同时用户的信息也能提供相应的权限,服务器就会认为这个用户已经登录了,随后资源信息就会通过 HTTP 响应给前端。

登录的session放到哪里 session 登录状态_服务器

二 无状态登陆

无状态登陆介绍:

第一步:同样是登陆,用户使用用户名和密码登陆,如果登陆成功,服务器就会返回一个加密文档,这个文档就是 JWT ,其中包含用户密码以外,全部的认证信息,包括用户名、Email、角色、权限等等,而前端在拿到 这个JWT 以后就可以把它保存起来了,可以保存到 Cookie 中,也可以保存到浏览器的 LocaStorage 里面,而生成的 JWT 不需要在后端保存;

第二步:用户如果需要访问某些权限的时候,这时候,用户就要把 JWT 放在 HTTP 请求 herder 中与请求一起发送给服务器,服务器取得 JWT 以后 会使用私钥给 JWT 文档解密 ,如果解密成功而且数据依然有效则代表用户已经登陆了,如果 JWT 所描述的用户权限允许该用户访问资源,那么服务器就会把资源的信息,通过 HTTP 响应发回给前端。

登录的session放到哪里 session 登录状态_HTTP_02

无状态token生成方式

一 Jwt方式

JWT其实是无状态token实现方式之一。
上述JWT实际上通过JwtBuilder将用户信息、秘钥和JWTID等构建成一个加密的字符串。 后续验证时使用同一秘钥创建JwtParser对JWT进行解析获取相应的信息。

二 RSA256非对称加密方式

当然也可以使用其他加密方式对用户信息进行加密作为无状态token来使用,
比如采用RSA256非对称加密来生成公钥私钥,采用公钥和用户信息进行加密生成无状态Token,
采用私钥对Token进行解密。

三 区别与差异

传统上用户登陆状态会以 Session 的形式保存在服务器上,而 Session ID 则保存在前端的 Cookie 中;而使用 JWT 以后,用户的认证信息将会以 Token 的形式保存在前端,服务器不需要保存任何的用户状态,这也就是为什么 JWT 被称为无状态登陆的原因,无状态登陆最大的优势就是完美支持分布式部署,可以使用一个 Token 发送给不同的服务器,而所有的服务器都会返回同样的结果。