Firebase身份验证持久性

时间:2019-07-03 05:58:42

标签: firebase firebase-authentication local-storage

我知道Firebase中有一个setPersistence方法来持久化用户的会话。但是,我想知道使用存储在sessionStorage中的数据的正确方法是什么。 在我的应用程序中,成功登录后,我调用setPersistence方法。然后在主组件中,我有专用路由,可以根据身份验证状态(在sessionStorage中检入)来加载请求的组件或重定向。

但是我想知道这是否安全。有人没有办法通过手动添加键/值来轻松破解吗?

是否应该添加额外的检查以确保sessionStorage中的数据是预期的数据?处理这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

请勿使用客户端检查来实施访问控制。不管使用哪种浏览器持久性,这些都只是表面检查。唯一安全的方法是强制执行检查,即通过传递已登录用户的ID令牌并对其进行验证来在服务器端进行检查。 Firebase Admin SDK提供了API来帮助解决此问题。或者,如果您使用的是Firebase安全规则,则该检查将自动为您完成。如果恶意用户绕过客户端检查,则用户数据(存储在您的服务器上或通过Firebase RTDB或Firestore存储)将保持不可访问状态。

基本上,永远不要依赖客户端检查来验证用户身份验证状态。

答案 1 :(得分:0)

您对它不是很安全的事实是正确的。 localStorage是cookie的一种更高级的替代品。它主要是用作基本键值对的快速持久存储,以帮助常规应用程序/网站正常运行。

问自己您是否真的要在cookie中存储敏感的用户信息

您的答案很可能是localStorage与此相同。但是,localStorage只能由创建它的源来访问,这增加了一定程度的安全性。仅出于窃取重要信息的目的,任何人都可以轻松绕过这种微小的安全性。如果对安全性的关注不够(CORS等),也可以通过跨站点脚本轻松访问。

话虽如此,当今许多应用程序都广泛使用它来存储登录信息,例如访问令牌和其他有关用户的“ 部分敏感”信息。但是,所有这些信息都由后端的某些服务器进行交叉验证,以检查其真实性。

如果已经存在一个系统(无论是Firebase内置还是您使用云功能定制的系统),都可以检查从localStorage检索到的特定用户的真实性,以及使用该信息的用户没有人可以访问敏感的用户信息,那么这不是问题。

  

有人无法通过手动添加键/值来轻松破解吗?

是的,尽管不像乍看起来那样简单,但确实有可能。

  

是否应该添加额外的检查以确保sessionStorage中的数据是预期的数据?处理这个问题的正确方法是什么?

取决于它是什么类型的信息以及其真实性对您,用户或您的应用的正常运行有多重要,您可能会或可能不希望建立一个检查系统。

可能的解决方案:一种可行的解决方案是使用某种加密方法,使用加密密钥(加密密钥)安全地存储在服务器上或仅被用户知道。

重要:永远不要将{strong>至高重要和私人信息(例如信用卡/借记卡号,密码等)存储在localStorage中,无论您多么拼命或您认为自己的应用/网站的“安全性”如何。