Firebase Auth 提供 REST API 来创建/删除/编辑身份验证用户。由于 API 密钥不是私有的,任何人都可以使用该 API。
例如创建新用户的端点是公开可用的,并且据我所知不能不被禁用。
在我看来,这是一个糟糕的情况,因为例如攻击者可以通过此端点创建大量用户,而这些用户对于我们的系统来说不是有效用户。攻击者可能会阻止客户的有效电子邮件地址,从而无法创建有效帐户。
如果攻击者知道用户 ID,他甚至可以删除身份验证用户。
我们添加了用户声明(只能通过管理 API 设置,不能通过公共 API 设置),以确保只有我们创建的用户才可以访问我们的系统,但这意味着我们需要付出很大的努力来定期删除用户通过我们的系统创建。
是否计划通过AppCheck来保护 FirebaseAuth ,以仅允许经过验证的应用程序访问 auth api?
因此,我试图将规则设置到存储中,但是我需要访问firestore才能对其进行正确设置。
这是我的示例:
在我的firestore数据库中,我有一个users集合,其中有一个名为的集合items。路径如下所示:/users/items/{itemId}
我希望用户可以使用以下路径将文件读写到存储中:/items/{id}/file.png仅当{id}该项目的已存在于itemsFirestore数据库集合中时。有没有办法使用firestore将规则正确设置到存储中?
我尝试了这个:
service firebase.storage {
match /b/{bucket}/o {
match /items/{item}/{allPaths=**} {
allow read, write: if exists(/databases/{database}/documents/users/$(request.auth.uid)/items/$(item));
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用:/
谢谢你的帮助!
我有一个 Firebase 应用程序,我正在集成 Zapier。他们要求用户通过他们的表单对我的应用程序进行身份验证。
它的工作方式是 Zapier 将向用户请求电子邮件和密码,并将其发送到我的端点以获取访问令牌并将其用于任何进一步的请求。
我不太清楚如何从服务器(节点 js)上的用户名和密码生成访问令牌,因为所有身份验证方法都存在于客户端 SDK 中。
到目前为止,我希望使用提供的电子邮件/密码对用户进行身份验证,从他们生成自定义令牌uid并将其发送回 Zapier。但我不能这样做,因为signInWithEmailAndPassword服务器 SDK 中没有或类似的方法。
我知道我可以通过电子邮件获取用户,但是我如何检查密码,因为相应的方法再次仅在客户端 SDK 中可用?
到目前为止,我有以下代码:
const rp = require('request-promise');
app.post('/api/integrations/zapier/auth', (req, res) => {
let data = req.body
admin.auth().signInWithEmailAndPassword(data.email, data.password) // <- this method doesn't exist in the server sdk
.then(response => admin.auth().createCustomToken(response.user.id))
.then(customToken => rp({
url: `https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=${config.apiKey}`,
method: 'POST',
body: {
token: customToken,
returnSecureToken: true
},
json: true,
}))
.then(idToken => {
res.send({
accessToken: idToken,
filed: data.email
});
}).catch(error => res.status(500).send(error)); …Run Code Online (Sandbox Code Playgroud)