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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

有人能给我一步一步的描述如何基于cookie的认证工作?我从来没有做过涉及认证或cookies的任何事情。浏览器需要做什么?服务器需要做什么?按什么顺序?我们如何保持安全?

我一直在阅读关于不同类型的身份验证和cookie的信息,但我想要一起使用这两种方法的基本描述 - 我只知道它们经常一起使用,但无法找到如何描述。

提问于
用户回答回答于

Cookie基本上只是字典中的一个项目。每个项目都有一个键和一个值。对于身份验证,密钥可能类似于“用户名”,值将是用户名。每次向网站发出请求时,浏览器都会在请求中包含Cookie,主机服务器将检查Cookie。因此,身份验证可以自动完成。

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

可以为Cookie服务器端配置不同的选项,例如到期时间或加密。加密的cookie通常被称为签名cookie。基本上,服务器对字典项目中的密钥和值进行加密,因此只有服务器才能使用这些信息。那么cookie将是安全的。

浏览器将保存由服务器设置的cookie。在浏览器向该服务器发出的每个请求的HTTP标头中,都会添加cookie。它只会为设置它们的网域添加Cookie。Example.com可以设置一个cookie,并在浏览器的HTTP标头中添加选项,以将cookie发送回子域名,比如sub.example.com。浏览器将cookies发送到不同的域名是不可接受的。

用户回答回答于

有人能给我一步一步的描述如何基于cookie的认证工作?我从来没有做过涉及认证或cookies的任何事情。浏览器需要做什么?服务器需要做什么?按什么顺序?我们如何保持安全?

第1步:客户>注册

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

第2步:服务器>处理注册

服务器收到此请求并在将数据库中的用户名和密码存储之前散列密码。这样,如果有人访问您的数据库,他们将看不到您的用户的实际密码。

第3步:客户端>用户登录

现在,您的用户登录。他/她提供他们的用户名/密码,并再次将其作为HTTP请求发送到服务器。

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

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

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

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

  1. 将其存储在与该用户关联的数据库中
  2. 将其附加到响应cookie以返回给客户端。请务必设置到期日期/时间来限制用户的会话

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

第6步:客户端>发出页面请求

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

这应该让你开始。一定要在注销时清除cookie!

扫码关注云+社区