Node.js 尝试了解登录系统和会话

Node.js 尝试了解登录系统和会话,node.js,session,authentication,encryption,login,Node.js,Session,Authentication,Encryption,Login,我试图理解用户如何保持日志记录(为了学习,我试图在没有框架的节点上实现这一点)。根据我的理解,我只想问几个问题: (1)当用户尝试登录时,它会在HTTP请求正文中发送用户和密码 (2)当数据到达服务器时,它会检查所需的一切,如用户是否存在以及密码是否正确 我想,我的问题来了:用户如何保持日志记录?第三步类似于: (3)服务器创建所需的所有会话数据,加密并发送到客户端? (4)客户端将加密数据存储在本地存储器中 (5)凭据随每个请求一起发送到服务器,服务器在处理每个用户的操作之前对其进行解密和检查

我试图理解用户如何保持日志记录(为了学习,我试图在没有框架的节点上实现这一点)。根据我的理解,我只想问几个问题:

(1)当用户尝试登录时,它会在HTTP请求正文中发送用户和密码

(2)当数据到达服务器时,它会检查所需的一切,如用户是否存在以及密码是否正确

我想,我的问题来了:用户如何保持日志记录?第三步类似于:

(3)服务器创建所需的所有会话数据,加密并发送到客户端?

(4)客户端将加密数据存储在本地存储器中

(5)凭据随每个请求一起发送到服务器,服务器在处理每个用户的操作之前对其进行解密和检查。

这就是我的理解。但我觉得这太离谱了。我觉得我错过了很多。。。在客户端存储数据似乎(至少对我来说)不安全。会话数据应该存储在服务器端吗?以及如何安全地发送用户名和密码?它必须在客户端加密吗?这安全吗?我想我在寻找一些模式,或者我不知道。我感到迷路了

是的,很抱歉我的英语很差,知识也很差。我不是在问代码,我也会很感激任何提示(比如在谷歌搜索什么,或者一个有趣的博客):)

谢谢你,尤恩·阿布拉佐:)

---编辑-- 最后,我建立了一些有用的链接,解决了我的大部分疑问:)

1和2是正确的

会话通常使用cookie实现,而不是客户端本地存储,因为cookie会随每个请求自动发送到服务器。cookie通常只包含一个随机生成的长ID,该ID表示存储在服务器端(例如数据库中)的数据。此数据将标识用户,并可能存储其他会话级别设置

还可以使用带有签名(可能是加密的)用户信息的cookie—例如,默认情况下ASP.NET会这样做。这样做的好处是会话不需要存储。缺点是会话不能轻易地从服务器端销毁。因此,例如,无法实现向用户显示其当前活动会话(来自其他设备)并允许其注销的功能

通过互联网发送用户名和密码最好使用HTTPS安全地完成。不要在客户端实现您自己的加密。它可能无法工作,而且如果连接未正确加密和验证,Cookie本身也可能被盗。

1和2是正确的

会话通常使用cookie实现,而不是客户端本地存储,因为cookie会随每个请求自动发送到服务器。cookie通常只包含一个随机生成的长ID,该ID表示存储在服务器端(例如数据库中)的数据。此数据将标识用户,并可能存储其他会话级别设置

还可以使用带有签名(可能是加密的)用户信息的cookie—例如,默认情况下ASP.NET会这样做。这样做的好处是会话不需要存储。缺点是会话不能轻易地从服务器端销毁。因此,例如,无法实现向用户显示其当前活动会话(来自其他设备)并允许其注销的功能


通过互联网发送用户名和密码最好使用HTTPS安全地完成。不要在客户端实现您自己的加密。它可能无法工作,而且如果连接未正确加密和验证,Cookie本身也可能被盗。

基本上,数据存储在服务器上,存储在mysql、mongo或dynamo等数据库中。它由一个密钥访问,该密钥在用户会话的cookie中启动。express中的中间件检查cookie是否存在,检索密钥,并从数据存储中检索数据。这允许您拥有一个在调用应用程序时保持完整的会话,还允许客户端在负载平衡的情况下工作,在这种情况下,它们可能不会始终命中同一个节点服务器。基本上,数据存储在服务器上,存储在数据库(如mysql、mongo或dynamo)中。它由一个密钥访问,该密钥在用户会话的cookie中启动。express中的中间件检查cookie是否存在,检索密钥,并从数据存储中检索数据。这允许您拥有一个会话,该会话在对应用程序的调用期间保持不变,并且还允许客户端在负载平衡的情况下工作,在这种情况下,它们可能不会始终命中同一个节点服务器。因此Cookie类似于存储在客户端的一段数据,并且它具有类似于服务器确定的值?服务器用一个密钥存储cookie“值”,并且客户端必须在每个请求中发送其“cookie密钥”?我来看看HTTPS。谢谢:)@EmilioGrisolía:cookie是服务器提供给客户端的键值对,例如“sessionid=af8ec260”(显然在实践中更长!)。您可以将任何相当小的数据存储在cookie中,并始终将其发送到服务器。但是,数据不能像任何客户端输入一样被信任,因此在实践中,人们通常只发送会话ID并存储实际数据,而您可能不希望人们在服务器端篡改这些数据。嘿,谢谢:)我刚刚用有用的链接编辑了我的帖子。我四处看看,终于明白了它是如何工作的:)再次感谢:)所以cookie就像是存储在客户端的一段数据,它有一个由服务器决定的值?服务器存储cookie“值”wi
[http://stackoverflow.com/questions/6922145/what-is-the-difference-between-server-side-cookie-and-client-side-cookie][1]
[http://blog.codinghorror.com/protecting-your-cookies-httponly/][2]
[http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf][3]
[https://es.wikipedia.org/wiki/Cookie_(inform%C3%A1tica)][4]
[https://newspaint.wordpress.com/2015/09/06/how-to-get-cookies-from-node-js-http-response/][5]