2014-10-02 63 views
0

我試圖將一些安全規則應用於我們的firebase實例,但我似乎無法從iOS獲得尊重它們的呼叫。我從一個簡單的測試開始,驗證身份驗證(應該成功),然後嘗試向根寫入未定義的值(應該失敗)。Firebase在使用祕密時忽略安全規則

規則:

{ 
    "rules": 
    { 
    //Default read and write access to authenticated users only 
    ".read" : "auth != null", 
    ".write" : "auth != null", 

    //Prevent undefined child variables 
    "$undef" : { ".validate" : false } 
    } 
} 

登錄:

- (void)authenticate 
{ 
    [_dataRef authWithCredential:SECURITY_CREDENTIAL //Firebase Secret JSON token 
    withCompletionBlock:^(NSError *error, id data){} 
    withCancelBlock:^(NSError *error) 
    { 
      //If the authentication becomes invalid, re-authenticate 
      [self authenticate]; 
    }]; 
} 

寫測試:

[[[[Firebase alloc] initWithUrl:ROOT_URL] childByAppendingPath:CHILD_PATH] setValue:VALUE]; 

現在我似乎無法弄清楚是爲什麼模擬器正確無法寫入該值,但iOS會忽略驗證並寫入數據。

此外,經過進一步測試,我遇到了第二個問題,從這個問題產生。如果我更改用於驗證某些不是有效的Firebase祕密令牌的憑據,那麼iOS將正確地驗證身份驗證失敗,但只要我通過身份驗證的模擬器就可以驗證任何字符串。是對的嗎?

回答

4

看起來您使用的是Firebase的祕密,它不是JWT,而是您的可信服務器用來簽署智威湯遜的共享祕密。目前可以使用祕密進行登錄,但不應將其與客戶分發,並且您正在觀察它提供管理員權限,因此會繞過所有安全規則和驗證。

如果您已經在自己的受信任服務器上設置了用戶認證系統,則可以使用token generator libraries之一直接將其與Firebase進行集成。您也可以使用其中一種產生一次性測試目的,但不建議將其與客戶端分發(任何人都可以檢查分佈式軟件包,如果看起來足夠硬,可以查看它)。

最後,您可以使用Firebase的登錄服務:Simple Login來管理來自不同提供商的用戶,其中包括許多OAuth提供商,電子郵件/密碼和匿名登錄。

+0

這裏是關於祕密的文檔的具體部分(https://www.firebase.com/docs/rest/guide/user-auth.html#section-rest-server-authentication),以補充Chris的答案。 – Kato 2014-10-02 17:16:23

+0

如果在https://www.firebase.com/docs/web/guide/understanding-security.html上的某個地方引用了它會很好 - 只是花了大量時間想知道爲什麼我的安全和驗證規則不符合要求,工作:P – 2014-12-16 02:55:37