返回

一、基于Session的应用开发的缺陷

前端

《JWT鉴权的应用场景及结构安全》#

曾经盛行的 Session 鉴权,在使用过程中暴露了诸多问题。于是,基于成熟的公钥密码学算法,出现了 JWT 鉴权机制。JWT 是一种标准化的、基于哈希的 HTTP 授权方法,采用对称或者非对称加密机制。相对 Session 而言,JWT 更加安全,因此,在单点登录和前后端分离等领域,JWT 鉴权有着极其广泛的应用。

在我们传统的 BS 应用开发方式中,都是使用 session 进行状态管理的,比如说:保存登录、用户、权限等状态信息。这种方式的原理大致如下:用户登陆之后,将状态信息保存到服务器端一个指定的存储空间中,这个存储空间由一个唯一的 id 来标识,我们通常称之为 session id,然后将这个 id 随 HTTP 响应报文返回给客户端,客户端将此 id 存储在一个名为 cookie 的文件中,后续,只要客户端发送请求,都会将这个 id 发送给服务端。

而服务端会在每个请求中读取这个 id,通过 session id,找到对应的 session,验证请求是否合法。如果合法,就根据存储在 session 中的状态信息,来决定是否允许用户操作,并做出相应的处理。

基于 Session 的方式有着许多缺陷,主要体现在以下几个方面:

  • 耦合性强。Session 将用户的登录状态绑定在了具体的服务器上,如果服务器故障,则所有用户都将被注销,影响应用程序的可用性。
  • 可伸缩性差。当业务压力增大时,需要对服务器进行横向扩展,而 Session 将用户的登录状态绑定在了具体的服务器上,这将导致横向扩展变得困难。
  • 安全性差。Session 在传输过程中是明文的,容易被窃取,从而导致安全问题。

JWT 鉴权机制具有诸多优点,因此,在许多领域都有着广泛的应用。

  • 单点登录。JWT 鉴权机制可以实现单点登录,用户只需要登录一次,就可以访问多个应用程序,而无需重复登录。
  • 前后端分离。JWT 鉴权机制可以实现前后端分离,前端通过 JWT 令牌来访问后端资源,而无需将用户信息存储在 cookie 中。
  • 移动应用程序。JWT 鉴权机制适用于移动应用程序,因为移动应用程序通常需要与服务器进行通信,而 JWT 令牌可以方便地随请求发送给服务器。

JWT 令牌由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

  • 头部。头部包含两个字段:typ 和 alg。typ 表示令牌的类型,通常为 JWT。alg 表示令牌的加密算法,常用的加密算法有 HS256、RS256 等。
  • 载荷。载荷包含用户信息,如用户名、角色等。
  • 签名。签名是对头部和载荷进行加密后的结果,用于验证令牌的完整性和真实性。

JWT 鉴权机制的安全主要体现在以下几个方面:

  • 数据加密。JWT 令牌中的头部和载荷都是经过加密的,这样可以防止数据泄露。
  • 签名验证。JWT 令牌中的签名是对头部和载荷进行加密后的结果,可以用来验证令牌的完整性和真实性。
  • 过期时间。JWT 令牌可以设置过期时间,过期后令牌将失效,这样可以防止令牌被长时间使用。

JWT 鉴权机制是一种安全、可靠、高效的鉴权机制,在许多领域都有着广泛的应用。本文介绍了 JWT 鉴权的应用场景、结构和安全性,希望能够对大家有所帮助。