会话和基于令牌的身份验证之间到底有什么区别

2025-06-07

会话和基于令牌的身份验证之间到底有什么区别

一位刚开始使用 Nodejs 进行后端开发的朋友请我解释一下 session 和 jwt 的区别。所以,我想写这篇文章,帮助那些想了解其他开发者谈论 session 和基于 token 的身份验证时究竟意味着什么的人。

快速介绍

首先,我们来谈谈 HTTP(超文本传输​​协议)。通过 Google 搜索,我们得到了以下信息:

HTTP 是万维网使用的底层协议,该协议定义了消息的格式化和传输方式,以及 Web 服务器和浏览器应采取哪些操作来响应各种命令。

从上述定义可以看出,HTTP 实现了客户端(前端)和服务器(后端)之间的通信。HTTP 是无状态的,因此每次发出的请求都完全不知道之前执行的操作。例如,我们刚刚登录 Twitter 帐户并导航到设置页面,按照默认的 HTTP 行为,我们需要重新登录,因为服务器不知道我们刚刚登录。但通过会话和令牌身份验证,我们可以告诉服务器我们已经登录,并且应该被授予访问该页面的权限。

什么是基于会话的身份验证?

基于会话的身份验证是指将用户状态存储在服务器内存中的身份验证。使用基于会话的身份验证系统时,服务器会在用户登录时创建会话数据并将其存储在服务器内存中,然后将会话 ID 存储在用户浏览器的 Cookie 中。
之后,会话 ID 会在后续请求中发送给服务器,服务器会将其与存储的会话数据进行比较,然后继续处理请求的操作。

什么是基于令牌的身份验证?

基于令牌的身份验证是指将用户状态存储在客户端的身份验证方式。这已成为 RESTful API 的首选身份验证模式。在基于令牌的身份验证中,用户数据会使用密钥加密为 JWT(JSON Web Token),然后发送回客户端。JWT
随后会存储在客户端(主要是 localStorage),并作为后续每个请求的标头发送。服务器接收并验证 JWT,然后再向客户端发送响应。

headers:{
"Authorization": "Bearer ${JWT_TOKEN}"
}
Enter fullscreen mode Exit fullscreen mode
  • 令牌如何与标头一起发送到服务器的典型示例

何时使用?

实际上,身份验证并没有一种最佳方法,两种方法可以互换使用,也可以组合使用,从而构建混合系统。最终取决于开发人员和用例。
然而,值得注意的是,基于令牌的身份验证比基于会话的身份验证具有更好的扩展性,因为令牌存储在客户端,而会话则使用服务器内存,因此当大量用户同时使用系统时,令牌可能会成为一个问题。

文章来源:https://dev.to/thecodearcher/what-really-is-the-difference- Between-session-and-token-based-authentication-2o39
PREV
Ruby on Rails 路线图
NEXT
新手网络