2014-10-02 3 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 будет корректно завершать auth, но симулятор с аутентификацией, пока я передаю ему любую строку. Это правильно?

ответ

4

Похоже, вы используете секрет Firebase, который не является JWT, а общим секретом, который ваш доверенный сервер должен использовать для подписи JWT. В настоящее время можно войти в систему, используя секрет, но он никогда не должен распространяться вместе с вашими клиентами, и, поскольку вы наблюдаете, он предоставляет права администратора, поэтому обходит все правила безопасности и проверку.

Если у вас уже есть система аутентификации пользователей, настроенная на вашем собственном доверенном сервере, вы можете использовать один из token generator libraries для непосредственной интеграции с Firebase. Вы также можете генерировать одноразовое для тестирования с использованием одного из них, но не рекомендуется распространять его с клиентом (любой может проверить распределенный пакет и найти его, если они будут выглядеть достаточно жестко).

Наконец, вы можете использовать службу входа Firebase: Simple Login для управления пользователями из разных провайдеров, включая ряд поставщиков OAuth, электронную почту/пароль и анонимный вход в систему.

+0

И вот конкретный раздел документации, который [рассказывает о секретах] (https://www.firebase.com/docs/rest/guide/user-auth.html#section-rest-server-authentication), чтобы добавьте ответ Криса. – Kato

+0

Было бы неплохо, если бы это было где-то на https://www.firebase.com/docs/web/guide/understanding-security.html - просто потратил кусок времени, задаваясь вопросом, почему мои правила безопасности и валидации weren ' t: P –