基于Cookie的认证,基于会话的认证,基于令牌的认证,基于声明的认证


25

我已经阅读了有关身份验证的内容,并对类型分类感到困惑。

让我们从基于Cookie的身份验证开始,如果我理解正确的话,关键是用户身份验证所需的所有数据都存储在cookie中。这是我的第一个困惑:我们可能会在Cookie中存储

  • 会话ID,因此它成为基于会话的身份验证?
  • 索赔,因此应将其称为基于索赔的身份验证吗?
  • 我发现有些人甚至将JWT令牌存储在cookie中,但这似乎是自定义身份验证流的自定义实现...

现在,我们切换到基于声明的身份验证。主要元素是索赔,索赔的集合可以用作容器

  • Cookies(如上所述)
  • 令牌(以JWT为例)。

另一方面,当我们谈论令牌时,它可能包含任何类型的信息...例如会话ID ...

那我错过了什么呢?人们为什么在谈论身份验证类型时不定义诸如Cookie-Session-basedToken-Claims-based身份验证之类的东西?

Answers:


38

我同意不同概念的命名令人困惑。在Web上下文中谈论身份验证时,需要考虑几个方面。

客户端在认证时发送什么信息?

  • 会话ID。这意味着服务器具有包含活动会话的会话存储。会话在服务器端是有状态的。
  • 一组索赔。声明包含有关客户端可能执行哪些操作的信息。服务器不会跟踪每个经过身份验证的客户端,但是会信任声明。声明通常在服务器端是无状态的。

客户端如何发送身份验证信息?

  • 饼干。设置cookie后,浏览器会根据每个请求自动发送cookie。Cookies容易受到XSRF的攻击。
  • 其他标题。通常,将Authorization标头用于此目的。这些标头不是由浏览器自动发送的,而是必须由客户端设置。这容易受到XSS的攻击。
  • 请求网址。认证信息包含在URL中。这是不常用的。

认证信息的格式是什么?

  • 纯文本,未签名。这可以用于会话ID。客户端通常无法猜测会话ID,因此服务器可以相信客户端尚未伪造会话ID。
  • Json Web令牌。JWT被加密签名并包含到期信息。客户端通常可以解码令牌,但是在没有服务器通知的情况下不能更改令牌。
  • 任何其他签名格式。与JWT相同。重要的是加密签名,它可以防止客户端更改数据。

奖励:客户端如何在本地存储信息

  • 饼干。当然,使用cookie传输信息时就是这种情况。但是Cookies也可以仅用作客户端存储机制。这需要从脚本中读取cookie才有用。例如,客户端可以使用JavaScript读取cookie,并使用Authorization-Header发送信息。
  • 本地存储。如果没有cookie,通常这是唯一可能的方法。需要使用JavaScript进行管理。

人们说的是什么意思...

  • “基于Cookie的身份验证”。我发现这通常意味着“会话ID,通过Cookie发送,可能是纯文本格式”。
  • “基于令牌的身份验证”。通常,这表示“声明,使用身份验证标头发送,编码为Json Web令牌。”
  • “基于声明的身份验证”。会话ID之外的任何东西都可以。

1
优秀的总结!需要注意的一件事...在中间攻击中,所有这些攻击者也很容易受到攻击,第三方可能会劫持cookie /标头信息,因此请确保通过HTTPS发送所有流量。
布兰登

3

简单的说,

  1. 基于Cookie的身份验证

    • Web客户端(例如:Web浏览器)在成功认证后存储由Web服务器发送的cookie。
    • Cookie包含有关用户,客户端,authN时间戳和其他有用数据的信息,并带有唯一ID来确定Cookie。
    • 通常,cookie由具有域属性集(例如google.com)的Web服务器加密,然后将其发送到Web客户端。
    • 每当网络客户端想要访问域资源(例如:)时mail.google.com,它将基于其域(例如:)的所有cookie发送google.com到网络服务器,该服务器根据状态和时间戳验证/验证并授予/拒绝访问Cookie。
  2. 基于会话的身份验证

    • 与Web客户端cookie一起,如果Web服务器在其后端存储用户authN数据,则将其称为基于会话的身份验证。
    • 如果Web客户端获得了不应访问的系统的访问权限,那么在后台发生违规事件时,这非常有用,然后管理员可以从后端撤消Web客户端的会话。
  3. 基于令牌的身份验证

    • 通常,这用于非Web客户端方案,在这种情况下无法在客户端存储cookie。
    • 因此,Web服务器在成功认证后将签名的令牌(包含有关用户,客户端,authN时间戳和其他具有唯一ID的有用数据的信息)发送给客户端。
    • 每当客户端想要访问资源时,客户端都需要发送此令牌,并且Web服务器在允许访问资源之前先验证/验证令牌。
  4. 基于声明的身份验证

    • 这与基于令牌的身份验证相同,只不过它会将更多有关客户端和/或与客户端关联的用户的数据添加到令牌中。
    • 这些数据与授权有关,授权讨论客户端应在资源内做什么(例如:mail.read,mail.delete,calendar.read)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.