Administrator
Administrator
Published on 2025-01-13 / 1 Visits
0
0

2024.12.24

Cookie、Session 和 Token 是用于在 Web 应用程序中管理用户状态身份验证的技术。因为在Web应用中,HTTP 的通信是无状态的,每个请求都是完全独立的,所以服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。

Cookie

Cookie 是服务器发送给用户浏览器的小型文本文件,存储在客户端的浏览器中。它会在浏览器下次向同一服务器再发送请求时被携带并发送到服务器上。服务器可以读取 Cookie 并使用其中的信息来进行识别和个性化处理。

每个 Cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的。Cookie 是不可以跨域的,并且每个域名下面的 Cookie 的数量也是有限的。

Seesion ID

Session 是在服务器端创建和管理的一种会话机制。当用户首次访问网站时,服务器会为该用户创建一个唯一的 Session ID,通常通过 Cookie 在客户端进行存储。会话标识符在后续的请求中用于标识具体是哪个用户。通常情况下,Session 是基于 Cookie 实现的,Session 存储在服务器端,Session ID 会被存储到客户端的 Cookie 中。

Cookie 和 Session 的区别主要有以下几个

  1. 存储位置不同:Session 是存储在服务器端的,Cookie 是存储在客户端的。

  2. 安全性不同:因为 Session 存储在服务器端,所以 Session 比 Cookie 安全。

  3. 存取值的类型不同:Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。

  4. 有效期不同:Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。

  5. 存储大小不同:单个 Cookie 保存的数据不能超过 4KB,Session 可存储数据远高于 Cookie ,但是当访问量过多,会占用过多的服务器资源。

Token

Token 也是一种用于用户身份鉴权的手段,他其实是一种代表用户身份验证和授权的令牌。在 Web 应用程序中,常用的身份验证方案是基于令牌的身份验证(Token-based Authentication)。当用户成功登录时,服务器会生成一个 Token 并将其返回给客户端。客户端在后续的请求中将 Token 包含在请求头或请求参数中发送给服务器。服务器接收到 Token 后,会进行验证和解析,以确定用户的身份和权限。Token 通常是基于某种加密算法生成的,因此具有一定的安全性。

  1. 跨域请求:Cookie 是不支持跨域的,当在不同的域名之间进行通信时,使用 Token 可以更方便地在跨域请求中传递身份验证信息,而不受 Cookie 限制。

  2. 分布式场景:Session 是存储在服务器上的,但是随着现在很多都是集群部署,这就使得 Session 也需要实现分布式 Session ,而如果能用 Token 的话,就可以不用这么复杂。

  3. API 交互:当我们使用浏览器访问后端服务的时候,可以用 Cookie 和 Session,但是如果是 API 调用,比如 Dubbo 交互,就没办法做 Cookie 的存储和传递了,而使用 Token 是常见的身份验证方式。

  4. 跨平台应用程序:Token 可以轻松地在不同的平台和设备之间共享和传递,而无需依赖特定的会话机制或 Cookie 支持。

  5. 前后端分离项目:现在很多项目都是前后端分离的了,这种项目中,前端和后端之间通过 API 的方式交互,这种的话用 Token 也会更加方便一些。

OAuth2

OAuth 2.0 (OAuth2)是一种开放授权协议,它允许用户将有限的访问权限授权给第三方应用,而无需直接共享用户的凭据(如用户名和密码)。OAuth2 是目前最流行的授权框架之一,被广泛应用于保护API 和实现安全的访问控制。以及单点登录的实现。

比如,通过 OAuth2 使用微信、微博、QQ 等账号登录第三方应用,而不需要输入密码。

OAuth2.jpg

大致流程就是客户端先向授权服务器请求权限,权限校验通过后向客户端颁发一个令牌,即 Access Token

后续客户端再访问资源服务器的时候,只需要带上这个令牌,资源服务器会对 Access Token做验证,验证通过后则进行数据返回。

OAuth 2 的优点如下:

  1. 安全性:用户无需将密码提供给第三方应用,减少泄露风险。

  2. 灵活性:通过 Scope 定义访问权限范围。

  3. 普遍适用性:支持多种类型的客户端(Web 应用、移动应用、服务器端等)

OAuth 2 的缺点:

  1. 实现复杂:授权流程和令牌管理机制较为复杂。

  2. 令牌保护:Access Token 暴露可能导致被滥用,因此需要结合 HTTPS、短时效性等机制加强安全。

  3. 授权服务器依赖:OAuth2 的安全性依赖于授权服务器的正确配置。


Comment