【发布时间】:2014-06-04 18:54:36
【问题描述】:
我正在尝试将 Web 应用程序从“传统”基于 cookie 的身份验证机制切换到纯粹基于令牌的身份验证机制。客户端收到令牌后应将其缓存以减少开销。存储令牌的最佳方式是什么?
这是我从谷歌搜索中学到的:
我研究的第一个有前途的途径是浏览器会话存储,但是,据我所知,这甚至不会跨标签共享,这意味着如果用户使用新标签点击来自网站的链接,他们将必须重新登录。
还有本地存储,但我希望用户在关闭浏览器时自动注销,而且我也对存储在存储中的令牌有点不安,即使我在服务器端使它们过期。只是看起来不干净。
另一种方法是将令牌存储在会话 cookie 中,这意味着它会在浏览器关闭时被终止,并且可以跨选项卡共享。这几乎是理想的,除了cookie当然会在每次访问服务器时通过网络发送,如果可能的话我想避免这种情况。尽管这不是安全问题,但通过 cookie 以及 HTTP 授权标头发送它似乎是多余的。我曾考虑将 cookie 路径设置为我的域上不存在的路径,但这也不是美的缩影...
因此,面对三个非最佳解决方案,我再次向 SO 寻求帮助。你们是怎么做到的?最好的方法是什么?
tl;dr 在单页 Web 应用程序中持久化身份验证令牌的规范方法是什么?
【问题讨论】:
-
我和你一样的情况,你找到解决办法了吗?我认为唯一的解决方案是使用启用了安全标志的 cookie 来防止一些攻击。我同意你的看法,这不是一个很好的解决方案,但目前是我唯一的解决方案。
-
是的,这也是我采用的方式,因为它最类似于用户从基于会话的身份验证机制中了解的体验。设置安全标志是防止意外以明文形式传输令牌的好主意。确保也使用 HTTPS。
标签: session authentication cookies access-token web-storage