会话身份验证是否比基于令牌的身份验证更安全?

Vil*_*oja 1 security authentication session login token

我一直试图了解会话和令牌身份验证之间的真正区别。

到目前为止我收集到的:

  1. 在令牌认证中,服务器端不会存储任何内容。这意味着,实际的令牌包括密码和用户名,以及其他可能的信息。而服务器只是解密令牌,然后检查用户名和密码是否正确。我说的对吗??如果令牌包含密码和用户名,那么令牌如何每次都不同?

  2. 在基于会话的身份验证中,会话令牌只是一个随机的(时间上唯一的)id,它映射到服务器端的用户。这样当服务器收到 session_id 时(例如在 cookie 中),它会检查它是否映射到任何用户,如果是,则对用户进行身份验证。那么 session_id 不包含任何与用户相关的信息,可以解密吗?

  3. 在会话认证中,服务器将不加密(除非使用https)发送回用户相关信息(不是密码)。

  4. 在令牌认证中,服务器不会直接发回用户信息,而是只发回包含用户信息的令牌,一旦解密?

我有一种感觉,我还没有真正理解令牌和会话身份验证的工作原理。上面的陈述肯定有问题。

但是,让我们相信这些陈述是正确的。那么基于会话的身份验证不是更安全吗?因为在基于会话的身份验证中,您不会泄露用户密码(例如在浏览器中)。由于它只是一个随机ID,因此无法从中获取信息。但 Token 身份验证并非如此。由于令牌认证包含密码,如果有人设法解密它,他将获得您的密码。那么会话身份验证实际上是否比令牌身份验证更安全,因为它不显示密码或用户名信息?

ped*_*ofb 7

你的问题没有绝对的答案是/否。例如,会话 cookie 容易受到 CSRF 的攻击,并且令牌可能会被 XSS 注入窃取。如果您不使用 HTTPS,这两种机制也容易受到 ManInTheMiddle 的攻击。因此,每个解决方案通常都需要额外的安全措施。取决于您的用例。

我猜你是在谈论像 JWT 这样的令牌机制,它是独立的并且可以防止更改,因为你说

在令牌认证中,服务器端不会存储任何内容。

但是你混淆了一些概念。我将尝试使用 JWT 令牌作为参考来回答您的其他问题。如果不是,大多数概念也可以应用于不透明令牌

在令牌认证中,服务器端不会存储任何内容。这意味着,实际的令牌包括密码和用户名,以及其他可能的信息。而服务器只是解密令牌,然后检查用户名和密码是否正确。我说的对吗??

令牌由服务器(而非客户端)发布,要求用户出示其凭据并使用服务器私钥进行数字签名。令牌包括sub索赔中本金的标识符和其他感兴趣的字段,如到期时间或发行人。从来没有密码

当客户端发送token进行身份验证时,服务器验证签名以确定真实性并没有被篡改

如果令牌包含密码和用户名,那么令牌如何每次都不同?

令牌不包括密码。由于某些变体声明(例如到期时间exp或在iat. 计算的签名也会不同

那么 session_id 不包含任何与用户相关的信息,可以解密吗?

是的,这是一个随机序列。与用户服务器的关系存储在服务器上

在令牌认证中,服务器不会直接发回用户信息,而是只发回包含用户信息的令牌,一旦解密?

JWT 令牌包含一些用户信息,但它没有加密,而是经过签名的。如果您需要隐藏有效负载,JWT 还允许使用 JWE 加密

但是,让我们相信这些陈述是正确的。那么基于会话的身份验证不是更安全吗?因为在基于会话的身份验证中,您不会泄露用户密码(例如在浏览器中)。由于它只是一个随机ID,因此无法从中获取信息。但 Token 身份验证并非如此。由于令牌认证包含密码,如果有人设法解密它,他将获得您的密码。那么会话身份验证实际上是否比令牌身份验证更安全,因为它不显示密码或用户名信息?

基本方法是错误的。密码从不包含在令牌中。如果您不想透露用户数据,您可以使用不透明令牌或 JWE 加密与 JWT。正确的解决方案取决于您的用例。看我的第一段