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

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


当前回答

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

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

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

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

为了扩展Conor的回答,并为讨论添加更多内容……

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

步骤1:客户端>注册

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

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

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

步骤3客户端>用户登录

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

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

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

步骤5:服务器>生成接入令牌

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

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

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

步骤6:客户端>进行页面请求

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

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

基于cookie的身份验证

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

The user provides a username and password in the login form and the client/browser sends a login request. After the request is made, the server validates the user on the backend by querying the database. If the request is valid, it will create a session by using the user information fetched from the database and store them. For each session a unique ID called the session ID is created. By default, the session ID will be given to the client through the Browser. The Browser will submit this session ID on each subsequent request. The session ID is verified against the database. Based on this session ID, the server will identify the session belonging to which client and then give the request access. Once a user logs out of the app, the session is destroyed both client-side and server-side.