具有有限权限的云功能身份验证
Cloud function authentication with limited privileges
我正在使用云函数为我的 firebase 数据库创建一个 RESTful API。我发现的所有教程和指南都建议使用 firebase-admin
来获得对数据库的管理员访问权限。
这是我的问题:
有没有办法像用户直接访问数据库一样访问数据库?就像从用户那里获取身份验证令牌并将其传递给数据库以像用户一样进行更改。如果我尝试对其他用户进行更改,安全规则应该会阻止我。
可能的解决方案:
使用数据库内置的 REST API 访问数据库,并使用 ?auth=CREDENTIAL
对用户进行身份验证。是否有使用 firebase
SDK 的替代方案?
Is there a way to access the database the same way as the user would have directly?
是的,我建议您查看 sample here。但它要求您的代码解码并验证该用户的 JWT。最简单的方法是使用 Admin SDK。
示例使用JavaScript SDK 从客户端获取令牌:
firebase.auth().currentUser.getToken()
它将此令牌传递给服务器,然后服务器使用 Admin SDK 对其进行验证:
admin.auth().verifyIdToken(idToken)
然后您可以创建 second instance of the admin SDK and set this UID for your database requests:
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://databaseName.firebaseio.com",
databaseAuthVariableOverride: {
uid: "my-service-worker"
}
});
我正在使用云函数为我的 firebase 数据库创建一个 RESTful API。我发现的所有教程和指南都建议使用 firebase-admin
来获得对数据库的管理员访问权限。
这是我的问题: 有没有办法像用户直接访问数据库一样访问数据库?就像从用户那里获取身份验证令牌并将其传递给数据库以像用户一样进行更改。如果我尝试对其他用户进行更改,安全规则应该会阻止我。
可能的解决方案:
使用数据库内置的 REST API 访问数据库,并使用 ?auth=CREDENTIAL
对用户进行身份验证。是否有使用 firebase
SDK 的替代方案?
Is there a way to access the database the same way as the user would have directly?
是的,我建议您查看 sample here。但它要求您的代码解码并验证该用户的 JWT。最简单的方法是使用 Admin SDK。
示例使用JavaScript SDK 从客户端获取令牌:
firebase.auth().currentUser.getToken()
它将此令牌传递给服务器,然后服务器使用 Admin SDK 对其进行验证:
admin.auth().verifyIdToken(idToken)
然后您可以创建 second instance of the admin SDK and set this UID for your database requests:
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://databaseName.firebaseio.com",
databaseAuthVariableOverride: {
uid: "my-service-worker"
}
});