如何向 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 Auth 将令牌发送回 android
如何在没有客户端身份验证的情况下从服务器验证 Firebase 用户?