簡體   English   中英

驗證從后端發出的 firebase 實時數據庫請求(無用戶)

[英]Authenticate firebase real time database requests made from backend (without a user)

  • 我正在管理一個包含大量 firebase 實時數據庫和大量數據的項目
  • 我還需要非常精確的安全功能,例如為某些用戶角色屏蔽某些字段或屏蔽包含與用戶相關的字段的數據......等

我知道我可以使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM