【问题标题】:Is there a way to determine if a Firebase user's UID is valid?有没有办法确定 Firebase 用户的 UID 是否有效?
【发布时间】:2017-07-08 04:57:09
【问题描述】:

我正在构建一个服务器路由,我希望限制它仅供经过身份验证的用户使用。我计划将带有 POST 的 user.uid 发送到此路由,并且我想验证 UID 是否存在于 Firebase 中。我知道我可以在 Firebase 中手动添加 UID 并检查这些数据,但是是否可以查看 Firebase 身份验证正在跟踪哪些 UID?我认为这种方法会比检查我自己的列表更好。

这样做的目的是确保这些路由不会被伪造的 UID 访问(例如出于恶意目的)。

【问题讨论】:

    标签: firebase firebase-authentication


    【解决方案1】:

    验证 UID 不足以阻止恶意用户:1) 攻击者可以通过发送其他用户的 UID 来伪装成其他用户,以及 2) UID 永远不会更改或过期,这意味着无法强制用户 (或攻击者)重新进行身份验证。

    您需要将 Firebase 令牌从客户端应用程序传递到您的服务器,并在接受之前验证令牌。

    • 令牌由 Firebase 私钥安全签名。任何其他方都不能颁发有效的 Firebase 令牌。

    • 令牌的有效期仅为一小时。 Firebase 服务器将在发布新令牌之前检查帐户状态(例如密码更改事件)。

    • 令牌有效负载包含 UID 和受众。您应该验证受众是您自己的应用程序。

    您可以使用 Firebase Admin SDK 或第三方库来验证 Firebase 令牌。详情请见Firebase doc

    【讨论】:

    • 这当然是一个更好的方法。我将使用这种方法而不是我最初考虑的方法。
    • 应该这样做。 @Jin 您能否详细说明如何获取从客户端收到的令牌并从后端验证它?我问是因为我尝试了 auth.verify_id_token(..) 但得到 'Auth instance has no attribute 'verify_id_token'
    • 但是如果一个恶意用户创建了一个新账户,他已经有了一个有效的token。你的意思是如果应用需要访问后端端点,我们应该在接受后端调用之前完成以上 3 点?
    【解决方案2】:

    您可以使用服务器上的 Firebase Admin SDK 检查特定 UID 是否对应于您项目中的 Firebase 身份验证用户。来自Firebase documentation on retrieving user data

    admin.auth().getUser(uid)
      .then(function(userRecord) {
        // See the UserRecord reference doc for the contents of userRecord.
        console.log("Successfully fetched user data:", userRecord.toJSON());
      })
      .catch(function(error) {
        console.log("Error fetching user data:", error);
      });
    

    【讨论】:

    • 这正是我所需要的。
    【解决方案3】:

    当 Firebase 用户通过 Firebase 身份验证时,UID 是负载的一部分,而当用户未通过身份验证时,UID 为 null。您可以通过用户身份验证获取 UID。语法因您使用的框架而异。

    查看 Firebase API 参考以了解具体语法和示例:https://firebase.google.com/docs/reference/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 2021-12-14
      • 2018-09-06
      • 2010-09-12
      • 2011-08-26
      • 2011-02-15
      • 2018-03-13
      • 1970-01-01
      相关资源
      最近更新 更多