2016-06-22 13 views
5

W tym fragmencie kodu (Firebase doc) zostały wymienione nie używać user.getUid() do uwierzytelniania serwera zaplecza. zamiast tego użyj FirebaseUser.getToken().Dlaczego nie możemy użyć getuid() do uwierzytelniania serwera backend w Firebase uwierzytelniania

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // Name, email address, and profile photo Url 
    String name = user.getDisplayName(); 
    String email = user.getEmail(); 
    Uri photoUrl = user.getPhotoUrl(); 

    // The user's ID, unique to the Firebase project. Do NOT use this value to 
    // authenticate with your backend server, if you have one. Use 
    // FirebaseUser.getToken() instead. 
    String uid = user.getUid(); 
} 


getUid() A unique user ID, intended as the user's unique key across all providers. 
getToken() The Firebase authentication token for this session. 

Moje żądanie to.

  1. Najpierw zarejestruję użytkownika za pomocą metody uwierzytelniania firebase (e-mail i hasło).
  2. Będę zapisywać String uid = user.getUid(); w moim własnym serwerze zaplecza po pomyślnej rejestracji.
  3. Informacje o stanie użytkownika mówią, że saldo użytkownika jest zapisywane na moim serwerze wewnętrznym jako key user.getUid().
  4. Logowanie użytkownika za pomocą wiadomości e-mail i hasła oraz pytanie o saldo konta.
  5. dostanę user.getUid() z Firebase i meczu z moich płyt, jeśli mecz znaleźć równowagę powraca do użytkownika.

Powiedzieli, że getUid() jest unikalnym identyfikatorem użytkownika, ale NIE używaj tej wartości do uwierzytelniania na serwerze zaplecza.

Dlaczego tak? Dlaczego nie możemy użyć metody getUid() do uwierzytelnienia z serwerem zaplecza?

+0

czy znalazłeś odpowiedzi na swoje pytanie? Planuję zrobić dokładnie to samo i nie znajduję problemu w procesie myślenia, który mamy – Snake

Odpowiedz

9

UID jest unikalnym identyfikatorem użytkownika. Oznacza to, że identyfikuje użytkownika, ale nie uwierzytelnia go.

Prosty konsekwencją jest to, że moja przepełnienie stosu ID to 209103. Wiedząc, że można mnie zidentyfikować. Ale aby udowodnić Stack Overflow, że jesteś Frankiem van Puffelenem, musisz znać moje kwalifikacje.

identyfikator ID użytkownika jest często narażona na interfejsie. Na przykład, jeśli klikniesz na mój profil, zobaczysz mój identyfikator. Jest to konieczne do identyfikacji mnie. Jeśli użyjesz tego samego identyfikatora do uwierzytelnienia, każdy, kto widział Twój profil, może podszyć się pod Ciebie w witrynie. Nie jest to dobry pomysł, jeśli chodzi o bezpieczeństwo.

+2

Dziękuję za odpowiedź i rozumiem twój punkt widzenia. Zgodnie z moim wymaganiem użyję getUid() do zidentyfikowania użytkownika (po uwierzytelnieniu za pomocą systemu firebase). Punkt # 4. Po uwierzytelnieniu informacji kredytowej użytkownika na moim serwerze zaplecza, otrzymam getUid() dla tego uwierzytelnionego użytkownika, wyszukuję rekord w odniesieniu do tego getUid() w moim DB i przedstawiam mu go. Moje pytanie brzmi: czy mam lukę w zabezpieczeniach w tym procesie? – user3559471

+0

@Frank, dobrze w rzeczywistości nie jestem jasno zrozumieć komentarz getuid() w bazach danych bazy firebase w "NewPostActivity" final String userId = getUid():. getUid jak może być wyjątkowy za każdym razem. – mehmet

+0

@ user3559471 serwer nie może ufać aplikacji. W jaki sposób serwer wie, że aplikacja zgłosiła prawidłowy identyfikator użytkownika? Serwer może użyć identyfikatora tokena do ograniczenia zaufania do integralności aplikacji. Serwer otrzymuje identyfikator z tokenu po sprawdzeniu, czy został on niedawno uzyskany z bazy firebase przez użytkownika, a nie tylko wyciągnięty z cienkiego powietrza. – user650881

Powiązane problemy