Bik*_*mat 7 authentication node.js firebase firebase-admin google-cloud-firestore
我正在设计一个基于VueJs(用于UI)+ NodeJs(用于后端,将在Google Cloud Platform中运行)+ Firestore(用于auth +数据库)的应用程序(我们称之为TodoList应用程序).
我已经浏览了Google的大量文档(有时是多余的!)来实现应该有用的东西,但我不确定它是否符合生产要求.
情况:
我在Firestore数据库上设置了一些安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/{document=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就不希望任何记录的用户访问其他用户的数据.
题:
由于Firebase Admin SDK对我的Firestore数据库具有完全权限,因此如何确保不会出现任何安全问题.现在,我只是验证请求中发送的accessToken到我的后端,但......有些东西让我觉得这个错了!
码:
在客户端:
auth.onAuthStateChanged((user) => {
if (user) {
// Save the user credentials
}
}
Run Code Online (Sandbox Code Playgroud)
在服务器端:
// idToken comes from the client app (shown above)
// ...
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;
// Retrieve or add some data in /users/{userId}/{document=**}
}).catch(function(error) {
// Handle error
});
Run Code Online (Sandbox Code Playgroud)
如您所见,一旦我验证了accessToken并检索了uid,我就可以对我的数据库执行任何操作.
参考
谢谢你的帮助!
Lan*_*ane 13
管理 SDK 将始终拥有对数据库的完全访问权限。
由于客户端从不直接访问 Firebase,因此您应该完全禁用对所有文档的访问。您的 API 仍然可以访问
match /{document=**} {
allow read, write: if false;
}
Run Code Online (Sandbox Code Playgroud)
小智 0
我认为从客户端验证访问令牌后,您可以在 firestore-admin 资源中发送 uid,并且 firestore 规则如下所示:
allow read, write: if request.resource.data.uid == userId;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1381 次 |
| 最近记录: |