[英]Authenticate firebase real time database requests made from backend (without a user)
我知道我可以使用 firebase 安全規則來處理這個問題,但在這種規模下,它根本不可讀也不可維護。
所以我想在服務器端處理所有這些安全功能並將所有請求代理到 firebase,所以我想知道什么是驗證我的后端向 firebase 發出的請求的最佳方法,因為我知道理想情況下,我不會授予任何用戶對任何數據庫的任何權限。
實際上,我曾嘗試使用單個“管理員”用戶並在我的所有 firebase 模型上制定簡單的安全規則,例如"read|write": "auth.uid === MY_ADMIN_UID"
,但我想知道是否有更好的解決方案。
你能指出我正確的方向嗎?
我想在服務器端處理所有這些安全功能並將所有請求代理到firebase ,所以我想知道驗證后端向 firebase 發出的請求的最佳方法是什么,我知道理想情況下,我不會授予任何用戶對任何數據庫的任何權限。
傳統上,在 Firebase model 中,如果您想從服務器與 Firebase 服務(例如實時數據庫)交互,您將使用Admin SDK 。 默認情況下,管理員 SDK 繞過所有安全規則並擁有對您數據的完全訪問權限。
換句話說,來自 Firebase 管理員 SDK 的請求不受安全規則限制。 因此,這意味着您可以使用拒絕任何訪問的安全規則(即".read": false, ".write": false
)來保護您的 RTDB,這樣知道 RTDB URL 的惡意用戶就無法查詢它。
這也意味着您負責控制誰在從代理服務器查詢 RTDB 之前調用您的代理服務器。
但是,使用實時數據庫,您可以使用有限權限向管理員 SDK 進行身份驗證,IMO 完全符合您的要求,即“驗證我的后端發出的請求的最佳方式”。
如文檔中所述(參見上面的鏈接),您“在安全規則中使用唯一標識符來表示您的服務”。
然后,您通過使用特定標識符“設置適當的安全規則,授予您的服務訪問所需資源的權限”。 例如:
{
"rules": {
"public_resource": {
".read": true,
".write": true
},
"private_resource": {
".read": "auth.uid === 'my-service-worker'", // <======
".write": false
},
}
}
然后,“在你的服務器上,當你初始化 Firebase 應用程序時,你使用databaseAuthVariableOverride
選項來覆蓋你的數據庫規則使用的auth
object。在這個自定義auth
object 中,將uid
字段設置為你用來表示你的服務的標識符在您的安全規則中”。 請參閱文檔中 Java、Node.js、Python 和 Go 的示例。
請注意,這仍然意味着您負責控制誰在從代理服務器查詢 RTDB 之前調用您的代理服務器,但安全規則不太通用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.