如何逐步描述基于cookie的身份验证工作过程?
我从未涉及过身份验证或cookie方面的任何操作。浏览器需要做什么?服务器需要做什么?以什么顺序进行?如何保持安全性?
我一直在阅读不同类型的身份验证和cookies,但我想要一个基本的描述如何将两者结合使用。我只是读到它们经常一起使用,但我找不到描述它们如何配合的信息。
如何逐步描述基于cookie的身份验证工作过程?
我从未涉及过身份验证或cookie方面的任何操作。浏览器需要做什么?服务器需要做什么?以什么顺序进行?如何保持安全性?
我一直在阅读不同类型的身份验证和cookies,但我想要一个基本的描述如何将两者结合使用。我只是读到它们经常一起使用,但我找不到描述它们如何配合的信息。
为了深入Conor的回答并且在讨论中加入一些内容...
能否有人给出一个cookie认证的步骤描述?我从没做过任何涉及认证或cookies的东西。浏览器需要做什么?服务器需要做什么?按什么顺序?如何保持安全性?
步骤1:客户端> 注册
首先,用户必须注册。客户端向服务器发送一个包含用户名和密码的HTTP请求。
步骤2:服务器> 处理注册
服务器接收此请求并对密码进行哈希处理,然后将用户名和密码存储在数据库中。这样,如果有人获得您的数据库访问权限,则无法看到您用户的实际密码。
步骤3:客户端> 用户登录
现在用户登录。他/她提供其用户名/密码,并再次将其作为HTTP请求发布到服务器。
步骤4:服务器> 验证登录
服务器查找数据库中的用户名,对所提供的登录密码进行哈希处理,并将其与先前在数据库中进行哈希处理的密码进行比较。如果不符合要求,我们可以通过发送401状态代码并结束请求拒绝他们的访问。
步骤5:服务器> 生成访问令牌
如果一切都符合要求,我们将创建一个访问令牌,该令牌唯一标识用户的会话。在服务器上,我们对访问令牌执行两个操作:
此后,cookies将附加到客户端和服务器之间进行的每个请求(和响应)中。
步骤6:客户端> 发送页面请求
回到客户端,我们现在已经登录。每当客户端请求需要授权的页面时(即他们需要登录),服务器从cookie获取访问令牌并将其与与该用户关联的数据库中的令牌进行比较。如果符合要求,则允许访问。
这将为您提供一个起点。请确保在注销时清除cookies!
Cookie基本上就是字典中的一项。每一项都有一个键和一个值。对于身份验证,键可以是类似于“用户名”的东西,而值则是用户名。每次您向网站发出请求时,您的浏览器都会在请求中包含cookie,并且主机服务器将检查cookie,因此身份验证可以自动完成。
要设置cookie,只需将其添加到响应中,该响应是服务器在请求后发送回来的。浏览器在接收响应后将添加cookie。
您可以为cookie服务器端配置不同的选项,例如过期时间或加密。加密cookie通常称为签名cookie。基本上,服务器会加密字典项中的键和值,因此只有服务器才能利用这些信息。这样cookie就是安全的。
浏览器将保存服务器设置的cookie。在浏览器向该服务器发出的每个请求的HTTP标头中,它都将添加cookie。它只会为设置了cookie的域添加cookie。例如,example.com可以设置一个cookie,并在HTTP标头中添加选项,以便浏览器将cookie发送回子域,比如sub.example.com。浏览器向不同的域发送cookie是不可接受的。
基于 Cookie 的身份认证
基于 Cookie 的 身份认证 通常分为以下四个步骤:
用户在登录表单中提供用户名和密码,并且客户端/浏览器发送登录请求。
请求发送后,服务器会通过查询数据库来验证用户。如果请求有效,则会使用从数据库中获取的用户信息创建一个会话并将其存储。对于每个会话,都会创建一个称为会话 ID 的唯一标识符。默认情况下,会话 ID 将通过浏览器提供给客户端。
浏览器将在每个后续请求中提交此会话 ID。会话 ID 将与数据库进行验证。根据此会话 ID,服务器将识别属于哪个客户端的会话,然后授予请求访问权限。
一旦用户从应用程序中注销,会话就会在客户端和服务器端同时销毁。