我可以使用 html5 本地存储来存储用户身份验证会话信息吗

Posted

技术标签:

【中文标题】我可以使用 html5 本地存储来存储用户身份验证会话信息吗【英文标题】:Can I use html5 local storage for storing user authentication session information 【发布时间】:2013-07-04 11:47:14 【问题描述】:

快速背景:

我正在编写 Mongo/Express/Angular/Node SPA 并使用护照我设置了 OAuth 登录选项来处理用户身份验证/授权。

使用护照,我成功地在服务器上维护会话,所以我所有的 XHR 请求(需要它)都在检查登录用户。

在登录服务器时,将基本用户会话信息放入 cookie 中,供客户端在授权回调中查找,然后我使用 angular-cookies 的 $CookieStore 访问客户端上的该 cookie,并将其保存到 rootscope 并清除 cookie。

问题:

除了用户刷新浏览器的任何事件之外,这一切正常,这会导致我的 rootscope 会话明显被擦除。

所以我正在考虑将会话信息存储在浏览器本地存储中(使用 store.js),然后即使在初始加载时,我也可以检查浏览器本地存储中是否存在会话,如果已经存在会话,则绕过 OAuth 登录.

在浏览器本地存储中存储用户会话信息是不好的做法还是存在一些逻辑/安全问题?

这个应用程序没有任何敏感数据,注册是免费的,登录真的只有在那里,所以我可以跟踪用户并存储在应用程序中为每个用户创建的数据。并且用户会话永远不会有密码(我只允许 OAuth 登录,没有本地选项)。

【问题讨论】:

取决于。但请确保我无法修改我的本地存储以在您的网站上创建有效的登录名。那会很讨厌。 我只会存储一个会话 ID,而且我可能会存储在一个 cookie 中。 @MarkusMikkolainen cookie 是否是更好的选择,因为它能够进入并修改本地存储中的对象? 不,但它适用于任何地方,并且是存储 sessionid 的一个经过尝试的选项,安全性不是来自 cookie,而是来自仅存储 sessionid 而不是所有登录信息。 如果您必须将内容存储在本地存储中并且容易被修改,您可以在存储之前对其进行加密签名,然后在加载时检查签名。但只存储 sessionid 更容易。 【参考方案1】:

而不是localStorage,查看sessionStorage 对象:http://www.w3schools.com/html/html5_webstorage.asp

它的工作方式与localStorage 完全一样,但是当浏览器窗口关闭时,整个sessionStorage 对象将被删除——但在任何页面刷新时都会保留。它是存储会话 ID 等的理想场所。

但请注意,sessionStorage 在浏览器选项卡中是孤立的 - 这意味着如果您的用户选择在新选项卡中打开链接,则sessionStorage 将被初始化为空。

【讨论】:

自动登录呢?还是持久登录?

以上是关于我可以使用 html5 本地存储来存储用户身份验证会话信息吗的主要内容,如果未能解决你的问题,请参考以下文章

身份验证令牌、本地存储和流星

存储 oauth 和本地身份验证方法的最佳实践?

不使用观察者无法在本地存储中存储用户详细信息(Firebase和Polymer身份验证)

在web api身份验证之后将令牌存储在浏览器本地存储中是否安全

如何在刷新页面上存储在本地存储中的 reactjs 中使用 JWT 进行身份验证?

您可以使用 HTML5 本地存储来存储文件吗?如果没有,怎么办?