Cookie 身份验证与 Token 身份验证的混淆,到底有什么区别?

问题描述 投票:0回答:1

我阅读了令牌身份验证与 Cookies会话与基于令牌的身份验证

我还阅读了如何使用 HTTP cookie、会话和令牌进行 Web 身份验证和授权?Cookie 与令牌:权威指南

但是那里的所有答案以及这两篇文章中提出的所有观点让我对 Cookie 身份验证与令牌身份验证(特别不是 JWT)之间的区别更加困惑,特别是从身份验证过程的角度来看。毕竟,这两种方法都会从服务器返回一个加密的字符串,然后服务器将验证该字符串。

我有一个项目通过以下方式实现了“令牌认证”,

  1. 用户输入他们的登录凭据。服务器验证凭据 是正确的并返回一个“令牌”,一个长加密字符串。令牌有过期时间。
  2. 此令牌存储在用户浏览器的本地存储中。服务器还将该令牌与用户的其他信息(主要是他的权限)一起存储。
  3. 对服务器的后续请求会在自定义请求标头字段中包含此令牌。
  4. 服务器首先验证令牌是否正确,然后验证权限信息以查看他/她是否可以访问所请求的资源。
  5. 用户注销后,令牌将从客户端和服务器端删除。

我知道与 Cookie 身份验证的明显区别在于 cookie 存储在浏览器的 cookie 中,并且 cookie 将具有 MDN 中定义的属性,如 name/path/domain/httponly... 。 cookie 将由浏览器自动发送,而我们的客户端 js 代码需要在每个请求中添加令牌。

但除此之外还有什么区别呢?我也很困惑,人们总是说使用cookie来进行会话控制。我看到人们交替使用基于会话的身份验证和基于Cookie的身份验证,就好像令牌身份验证无法进行会话控制(因此是无状态的)。

显然,我们的代码使用令牌来进行“会话控制”。如果请求不包含有效令牌或权限不够,则会被拒绝。当用户注销时,令牌将被删除,下次登录时服务器将给他一个新令牌。

我一直认为,在用户登录期间,我们正在进行某种会话控制(直到他注销)。

我的最后一个问题是(除了区别之外)我们的令牌身份验证及其“会话控制”是否存在任何潜在问题?

我在这里附上一张网络请求图片,让我的流程更加清晰。在登录过程中,有一个从服务器获取令牌的请求,之后的每个请求都将包含令牌标头。

authentication security session cookies token
1个回答
1
投票

立即想到的一个区别是 Cookie 是标准化的(例如,在 RFC 6265 中)。因此,它们经过了良好的测试,可以在不同的供应商之间工作。使用自定义令牌的原因可能是需要使用 HTTP 以外的协议进行通信。

会话控制问题似乎与不断更改令牌的能力有关。您可以在每个 API 响应中返回一个新令牌,并只允许它授权几个后续请求。 Cookie 通常会在很长一段时间内保持不变,您可以将它们复制到不同的 HTTP 客户端并从那里获得并行访问 - 这可能就是所谓的不受控制的会话。

© www.soinside.com 2019 - 2024. All rights reserved.