令牌认证与会话认证
HTTP(超文本传输协议)
HTTP 是客户端和服务器之间通信的协议。HTTP 是无状态的,这意味着每个请求都不知道之前的任何操作。例如,当用户登录后浏览应用程序时,服务器不会知道我们刚刚登录过,因为没有进行会话或令牌认证。
会话认证
在会话认证中,服务器负责在用户登录时为该用户创建一个会话,之后会话 ID 会存储在用户浏览器的一个 cookie 中。用户发送的每个请求都会同时发送该 cookie,服务器会将 cookie 中的会话 ID 与服务器上存储的会话信息进行比较,从而验证用户身份。
令牌认证
在令牌认证中,服务器会创建一个 JSON Web Token (JWT) 并将其发送给客户端。JWT 通常存储在本地存储或 Cookie 中,并包含在用户发出的每个请求中。服务器会验证 JWT。JWT 认证是一种更现代的方法,常用于新型 Web 应用程序和移动设备。在这种方法中,用户状态不会存储在服务器上,而是存储在 JWT 中。
可扩展性
一般来说,JSON Web Token 能够更好地随着应用程序规模的增大而扩展,因为它无状态,无需存储用户信息;另一方面,如果应用程序流量很大,会话可能会占用大量服务器资源。
安全
JSON Web Token (JWT) 通常存储在本地存储或 Cookie 中,而 JavaScript 可以访问本地存储,这意味着 JWT 可能容易受到跨站脚本攻击 (XSS)。因此,非常敏感的数据不应该存储在本地存储中。如果 JWT 存储在 Cookie 中,则容易受到跨站请求伪造 (CSRF) 攻击。防止 CSRF 攻击的一种方法是确保 Cookie 只能由您的域访问。此外,JWT 的过期时间应该较短,并且应该使用 HTTPS/SSL 来确保客户端和服务器之间的安全传输。
哪个更好?
虽然会话和JSON Web Token都是可行的选择,但在某些情况下,其中一种比另一种更合适。对于小型和中型网站,如果只有用户登录,会话认证通常就足够了。而对于大型网站和应用程序,当需要处理大量请求时,由于JSON Web Token具有更好的可扩展性,因此更胜一筹。
文章来源:https://dev.to/vasilevskialeks/token-vs-session-authentication-56ed
