在GET请求中使用HTTPOnly Cookie(使用user_id cookie从服务器检索用户信息)

时间:2018-07-21 22:29:48

标签: node.js angular express cookies

我正在关注一个教程,在该教程中,登录用户后,后端将HTTPOnly cookie发送到包含用户ID的前端。但是,HTTPOnly cookie无法从前端访问(例如document.cookie将无法读取cookie)。

我的问题是,该cookie如何用于检索用户数据?我的想法是,您将执行GET'server_address'/ user /'id'这样的操作,其中'id '是存储在Cookie中的用户ID。但这显然行不通,因为前端无法访问Cookie,因为它是HTTPOnly。我想到的一种可能的解决方法是,服务器在登录后在JSON响应中发送用户ID,但是如果这是解决方案,那么甚至首先设置cookie的意义是什么?这种解决方法使得如果您只需将ID发送回JSON响应中,似乎根本就没有必要使用Cookie来保存用户会话。

请多多包涵,这是我第一次使用cookie。如果有帮助,我正在使用Angular 4前端和Node / Express后端

2 个答案:

答案 0 :(得分:1)

httponly cookie被存储在浏览器中,并且将来会与cookie的来源相匹配的任何请求自动重新发送回服务器。因此,服务器可以使用cookie来标识哪个客户端正在发出请求。例如,如果是一个身份验证cookie来标识经过身份验证的用户是谁,则服务器将知道此请求来自哪个经过身份验证的用户,并可以使用该信息对请求进行身份验证并知道该用户是谁。

您似乎已经知道,浏览器Javascript无法检索httponly cookie。那就是httponly的意思。

  

该cookie如何用于检索用户数据?

该Cookie随该客户端的任何请求一起发送到服务器,因此服务器可以使用cookie来识别哪个用户在发出请求。

  

我想到的一种可能的解决方法是,服务器登录后在JSON响应中发送用户ID

如果服务器希望客户端知道用户ID,则应在响应中将其返回。或者,它可以停止使用httpOnly cookie,以便客户端可以读取cookie。但是,通常表示各种身份验证状态的cookie在服务器上都会被加密,因此即使它们不是httpOnly,它们也常常无法被客户端理解。

  

如果这是解决方案,那么甚至首先设置cookie的意义是什么

使用Cookie的原因有很多。它们允许服务器设置与该特定客户端相关联的某些状态,并且该客户端的每个将来请求都会将该Cookie发送回服务器,以便服务器可以访问该信息。该信息可以是身份验证信息,用户ID信息,用户首选项等...

  

这种解决方法使得如果您只需将ID发送回JSON响应中,似乎根本就没有必要使用Cookie来保存用户会话。

关于您的应用程序,您并没有真正告诉我们太多信息,但是cookie通常涉及实现登录和安全性,并且由于它们会与所有将来的请求一起自动发送,因此它们节省了客户端将证书附加到每个客户端的麻烦。将来的单个请求(因为会自动包含cookie凭据)。而且,对于诸如用户单击页面中的链接之类的请求,cookie是必需的,因为这些类型的链接中将没有凭据(也不应该)。

  

我的想法是,您将执行GET'server_address'/ user /'id'

那么您打算与该请求有任何安全关联?如果是这样,那么您需要一种身份验证方案,以便不仅任何人都可以为任何用户请求信息。这通常是Cookie的用途。登录后,服务器将凭据设置为加密的cookie。该凭据标识了一个特定的经过身份验证的用户,以便服务器可以使用该cookie来查看该用户的身份以及是否经过身份验证。

答案 1 :(得分:0)

我们将cookie设置为httponly来防止XSS,想象一下是否存在允许黑客注入脚本<script>sendToHackerServer(document.cookie)...</script>的安全漏洞,因此用户的cookie(包括会话)将被发送到黑客服务器,然后黑客可以通过该会话访问用户数据。由于这些httponly cookie仅可通过http请求读取,因此会话cookie将不会由注入的脚本发送,并且您的快速后端可以使用req.cookies读取这些cookie。