基于cookie的身份验证是如何工作的?

谁能给我一步一步地描述一下基于cookie的身份验证是如何工作的?我从来没有做过任何涉及身份验证或cookie的事情。浏览器需要做什么?服务器需要做什么?什么顺序?我们如何保证安全?

我一直在阅读关于不同类型的身份验证和cookie,但我想了解如何将两者结合使用的基本描述-我只读到它们经常一起使用,但找不到如何使用的描述。

178163 次浏览

cookie基本上就是字典中的一个条目。每一项都有一个键和一个值。对于身份验证,键可以是'username'这样的东西,值可以是用户名。每次您向网站发出请求时,您的浏览器都会在请求中包含cookie,主机服务器将检查cookie。身份验证可以像这样自动完成。

要设置cookie,只需将其添加到服务器在请求后发回的响应中。浏览器将在收到响应后添加cookie。

你可以为cookie服务器端配置不同的选项,比如过期时间或加密。加密cookie通常被称为签名cookie。基本上,服务器对字典项中的密钥和值进行加密,因此只有服务器可以使用这些信息。这样cookie就安全了。

浏览器将保存服务器设置的cookie。在浏览器向该服务器发出的每个请求的HTTP头中,它将添加cookie。它只会为设置cookie的域添加cookie。Example.com可以设置cookie,还可以在HTTP报头中添加选项,以便浏览器将cookie发送回子域,例如sub.example.com。浏览器向不同的域发送cookie是不可接受的。

为了扩展康纳的回答并在讨论中添加更多内容…

谁能给我一步一步地描述一下基于cookie的身份验证是如何工作的?我从来没有做过任何涉及身份验证或cookie的事情。浏览器需要做什么?服务器需要做什么?什么顺序?我们如何保证安全?

步骤1:客户端;签约

在做其他事情之前,用户必须注册。客户端向服务器发送一个HTTP请求,其中包含他/她的用户名和密码。

步骤2:服务器>办理报名

服务器接收此请求并在将用户名和密码存储到数据库之前对密码进行散列。这样,如果有人获得了数据库的访问权限,他们也不会看到用户的实际密码。

第三步:客户端;用户登录

现在您的用户登录了。他/她提供了他们的用户名/密码,同样,这是作为HTTP请求发布到服务器。

步骤4:服务器>验证登录

服务器在数据库中查找用户名,对提供的登录密码进行散列,并将其与数据库中先前散列的密码进行比较。如果它没有检出,我们可以通过发送401状态码并结束请求拒绝他们访问。

步骤5:服务器>生成访问令牌

如果一切正常,我们将创建一个访问令牌,它唯一地标识用户的会话。仍然在服务器中,我们对访问令牌做了两件事:

  1. 将其存储在与该用户关联的数据库中
  2. 将其附加到要返回给客户机的响应cookie上。一定要设置一个过期日期/时间来限制用户的会话

从此以后,cookie将附加到客户机和服务器之间的每个请求(和响应)。

第六步:客户端;发出页面请求

回到客户端,我们现在已经登录了。每次客户端对需要授权的页面发出请求(即他们需要登录)时,服务器从cookie中获取访问令牌,并将其与数据库中与该用户关联的令牌进行检查。如果检查成功,则授予访问权限。

这应该是你的开始。请务必在登出时清除cookie !

基于cookie的身份验证

基于cookie的身份验证通常工作在这4个步骤-

  1. 用户在登录表单中提供用户名和密码,客户端/浏览器发送登录请求。

  2. 请求发出后,服务器通过查询数据库在后台验证用户。如果请求有效,它将使用从数据库获取的用户信息创建一个会话并存储它们。为每个会话创建一个称为会话ID的唯一ID。默认情况下,会话ID将通过浏览器提供给客户端。

  3. 浏览器将在每个后续请求中提交此会话ID。会话ID根据数据库进行验证。根据这个会话ID,服务器将识别属于哪个客户机的会话,然后给予请求访问权。

  4. 一旦用户注销了应用程序,会话将在客户端和服务器端同时被销毁。