如何向 Firebase 验证服务器?

Posted

技术标签:

【中文标题】如何向 Firebase 验证服务器?【英文标题】:How do you authenticate a server to Firebase? 【发布时间】:2015-05-28 06:06:42 【问题描述】:

我有一个在 Firebase 上编写的应用。安全规则和客户端代码不足以使我的应用程序正常工作。我需要连接服务器来完成一些任务:

清理难以清理的非规范化数据 onDisconnect handlers 为我的数据构建超出我能力范围的附加索引 和 queries

【问题讨论】:

【参考方案1】:

更新 (20160611):如果您在 https://firebase.google.com 上创建项目,则从服务器访问数据库的步骤会有所不同。看到这个答案:Is it still possible to do server side verification of tokens in Firebase 3?

您可以通过两种方式执行此操作:生成服务器身份验证令牌,或使用 Firebase 密钥。

生成服务器令牌 您可以使用为自定义登录创建的相同token generator libraries 来生成可以从您的服务器使用的令牌。然后,您可以根据您的安全规则提供对该服务器的特殊访问权限。

步骤如下:

    为您的服务器的语言/平台获取token generator library。 Node.js 和 Java 服务器往往工作得最好。

    使用预选的 uid 生成令牌。如果您正在编写 node.js 服务器,代码可能如下所示:

    var FirebaseTokenGenerator = require("firebase-token-generator");
    var tokenGenerator = new FirebaseTokenGenerator("<your-firebase-secret>");
    var token = tokenGenerator.createToken(
       uid: "my-awesome-server", 
        expires: <far_into_the_future_seconds> );
    

    使用令牌来验证您的客户端。这里有更多 node.js 代码:

    var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
    ref.authWithCustomToken(token, function(error, authData) 
      ...
    );
    

    如果您的服务器语言没有客户端,例如php,将 REST 请求的令牌用作 auth parameter。

    更新您的安全规则以授予您的服务器由 uid 标识的特殊权限,例如允许对整个 Firebase 进行读取访问的简单规则

    
        "rules": 
            ".write": false,
            ".read": "auth.uid === 'my-awesome-server'"
        
    
    

    访问所有数据,做一些很棒的事情。

优势

这是 Firebase 官方推荐的对您的服务器进行身份验证的方法。 您的服务器将遵守验证规则。 服务器只是另一个用户。您可以使用安全规则来提供对数据的细粒度访问。 由于访问是细粒度的,因此您的服务器中的错误不太可能造成损坏,例如删除您的根节点。

Firebase 机密

如果您是那种喜欢生活在边缘的开发者,并且会立即输入sudo,您还可以直接使用您的 Firebase 密码进行身份验证。

但是说真的,不要这样做。很危险。

不这样做的理由

就像盲目使用sudo一样,非常危险。 你的 服务器将不遵守您的验证规则。 您的服务器已完全读取 / 对您的 Firebase 的写入权限。如果它有一个足够丑陋的错误,它 可能会删除或损坏没有业务访问权限的数据。 你的 秘密最终出现在更多地方(可能在出站请求日志中, 等等)。如果它泄露出去,您将面临更大的风险。

【讨论】:

这是 firebase.com/docs/web/guide/login/custom.html 的一个很好的副本,但实际上扩展了一些有价值的点。 @kapad:这取决于你。它们只需要客户端可以访问,因此有些人使用网络级别的控制,因为他们将用户身份验证到 Intranet。对于其他用例,它通常与现有的登录名和密码集成。 这里是服务器身份验证的官方链接firebase.google.com/docs/auth/server @mimming 你能看看我的问题吗?我正在努力使用访问令牌访问我的 Firebase 数据库。 ***.com/questions/40810233

以上是关于如何向 Firebase 验证服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Firebase上为cURL添加身份验证系统?

如何使用 Firebase Auth 将令牌发送回 android

如何在没有客户端身份验证的情况下从服务器验证 Firebase 用户?

如何针对 Firebase 验证身份验证令牌?

如何使用 Firebase Auth 作为 OIDC 向 Amplify GraphQL 发出经过身份验证的请求?

如何使用 Firebase 身份验证服务并在我们自己的数据库中拥有用户?