2012-01-21 20 views
9

Jestem zainteresowany tym, jak najlepiej zrobić autoryzację użytkownika w aplikacji mobilnej. W tej chwili konfiguracja jest dość prosta. Przechowuję nazwę użytkownika i hasło w aplikacji i wysyłam ją do interfejsu API za każdym razem, gdy potrzebuję uruchomić ograniczone zapytanie.Jak wprowadzić uwierzytelnianie użytkownika do aplikacji mobilnej?

Uważam, że to chyba zły sposób, aby to osiągnąć.

Czy lepszym sposobem jest wysłanie nazwy użytkownika i hasła, gdy użytkownik się loguje, a następnie zapisuje identyfikator tego użytkownika? Problem polega na tym, że wtedy api akceptuje identyfikator użytkownika, a nie nazwę użytkownika i hasło. Identyfikator użytkownika będzie o wiele łatwiejszy do "odgadnięcia", a złośliwe osoby będą mogły przesłać zapytanie do api z losowo wybranymi identyfikatorami użytkownika wykonującymi działania na ich koncie. Mam klucz API. Czy to wystarczająco bezpieczne?

Problem polega na tym, że chcę rozpocząć integrację Twittera i Facebooka oauth z aplikacją. Nie czytałem dużo o tym, ale myślę, że dostaniesz "token". Jak to działa z konfiguracją, którą sugerujesz? Czy przyzwolenie na tworzenie tokena w mojej własnej bazie danych użytkowników i korzystanie z tokena (bez względu na to, czy jest to moje, facebooka czy twittera), byłoby korzystne jako autoryzacja? A może sensownym byłoby oddzielenie każdej usługi od siebie i radzenie sobie z nimi osobno?

Dziękuję.

Odpowiedz

8

Prawidłowym sposobem byłoby wygenerowanie tokena uwierzytelniania na serwerze podczas logowania użytkownika i wysłanie tego tokena w odpowiedzi na logowanie. Następnie token jest używany w kolejnych żądaniach.

Oznacza to, że serwer musi monitorować generowane przez siebie tokeny uwierzytelnienia. Możesz także śledzić czasy tworzenia tokena i sprawić, że tokeny wygasną po pewnym czasie.

Token musi być wystarczająco długim losowym ciągiem, aby nie można go było łatwo odgadnąć. Jak to zrobić, odpowiedział wcześniej: How to generate a random alpha-numeric string?

Osobiście wolę podejście UUID.

Aktualizacja:

Ten problem został już rozwiązany w przeglądarkach internetowych, za pomocą ciasteczek i sesji. Możesz ponownie użyć tego mechanizmu w swoich żądaniach Androida (chociaż niektórzy puryści REST obalą to podejście):

  1. Włącz sesje na serwerze.

  2. Kiedy użytkownik loguje się do serwera dodać niektóre dane do sesji, na przykład czas logowania:

    request.getSession().setAttribute("timeOfLogin", System.currentTimeMillis()); 
    
  3. Ponieważ sesje są włączone, należy również włączyć obsługę plików cookie w httpclient wniosków: Using Cookies across Activities when using HttpClient

  4. Za każdym razem, gdy zostanie wysłane żądanie, serwer powinien sprawdzić, czy sesja zawiera atrybut timeOfLogin. W przeciwnym razie powinien zwrócić odpowiedź HTTP 401.

  5. Po wylogowaniu się użytkownika wywołaj adres URL wylogowania z serwera i wyczyść pliki cookie na kliencie.

+0

OK, więc generowanie tokena jest drogą do zrobienia. Niegodziwy! :) Dzięki –

Powiązane problemy