gpt4 book ai didi

session - Firebase session 过期

转载 作者:行者123 更新时间:2023-12-02 12:53:29 26 4
gpt4 key购买 nike

看起来 Firebase 在从 v2 迁移到 v3.x SDK(现在又迁移到 v4)时,决定删除自动 session 过期选项,转而采用始终经过身份验证的模型。

这是一个很好的功能,但从网络安全的角度来看,我发现了一些问题,因为这是具有 Firebase 生成的 token (例如 email and password authentication)的 Firebase SDK 的唯一选项(其中一些在链接的谷歌小组讨论中得到了很好的解释)。

通常提供的在页面退出时调用 user.signOut() 的建议存在一些漏洞。也就是说,如果客户端崩溃,则该代码永远不会执行,因此策略就会崩溃。 “页面加载时退出”建议也有漏洞:

  1. 每次页面加载/重新加载时强制所有用户登录(不是目标)
  2. 由于 Firebase 将大部分内容推送到客户端,因此没有什么可以阻止某人创建尝试访问目标 Firebase 的脚本,没有 user.signOut()

我正在寻找一种从网络安全角度来看做得更好的策略,允许用户选择“始终经过身份验证”的策略(如果他/她选择的话),而不是默认策略(即使用“记住我”按钮)。

我提出的一个策略如下:

  1. 用户登录
  2. 获取为该 session 生成的 JWT 并将其写入 Firebase
  3. 如果用户在登录时未选择“记住我”,请设置 onDisconnect从用户 token 列表中清除 token 的处理程序
  4. 在 Firebase 安全规则中,确保发出请求的用户的 JWT 位于该用户的 token 列表中

这感觉更安全,因为即使浏览器崩溃,onDisconnect 方法仍然会执行。 但是,JWT 不能用作 Firebase 规则变量 ( only the contents of the token )!

鉴于这些问题/有缺陷的方法,如何在浏览器关闭/崩溃后(甚至在预定时间段后)使用 Firebase 生成的 token 使 session 失效?

最佳答案

这里有一个建议:ID token 有一个 auth_time 字段。这是用户进行身份验证的时间,您可以强制设置您想要的任何 session 长度。如果您在服务器上验证 token 或使用 https://firebase.google.com/docs/reference/security/database/#now 通过数据库规则验证 token ,则可以强制执行此操作。和 auth.token.auth_time。检查https://firebase.google.com/docs/reference/security/database/#authtoken .

您需要用户重新进行身份验证才能访问数据。重新验证将更新 token 中的 auth_time。

这是一种更好的方法,因为跟踪所有 ID token 无法很好地扩展,并且 ID token 会在一小时后过期,并且新的 ID token 将在用户返回应用程序后刷新,但会保持相同的 auth_time。

不确定这是否会减轻您的担忧,但 Firebase 正在研究以下功能:

  1. 能够指定 Web 身份验证的持久性。这类似于 Firebase 3.x 中 sessionOnly 身份验证的工作方式。这将使“记住我”功能易于实现。
  2. 撤销 session 的能力。

关于session - Firebase session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44958813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com