Podstawowe uwierzytelnianie z tokenem Guid dla REST api zamiast nazwy użytkownika/hasła

Przegląd

Rozwijam aplikację mobilną za pomocą PhoneGap z REST API dla backendu. API REST nie będzie używane przez zewnętrznych programistów, ale będzie specyficzne dla aplikacji, więc nie ma potrzeby implementacji oAuth. Dlatego planuję korzystać z podstawowego uwierzytelniania, gdzie użytkownik wprowadza swoją nazwę użytkownika/hasło, aby uzyskać dostęp do zasobów API. Cała komunikacja API będzie odbywać się na SSL.

Podstawowe uwierzytelnianie z Tokenem

Zamiast pozwolić Aplikacja przechowuje nazwę użytkownika/hasło i wysyła je przy każdym żądaniu do API, wolałbym raczej uwierzytelnić nazwę użytkownika/hasło przy pierwszym żądaniu logowania i odesłać token GUID. Klient przechowuje ten token GUID i wysyła go z powrotem do API z każdym żądaniem za pośrednictwem nagłówka autoryzacji, w następujący sposób:

Autoryzacja: Basic e1d9753f-a508-46cc-a428-1787595d63e4

Po stronie serwera kombinacja username/GUID będzie przechowywana na serwerze z data ważności wraz z ustawieniami urządzenia. Pozwoli to na śledzenie liczby urządzeń, z których zalogował się użytkownik, a także wygaśnięcie sesji po wygaśnięciu identyfikatora Guid.

Czy takie podejście brzmi rozsądnie i bezpiecznie?
Author: badikumar, 2012-08-23

2 answers

Ogólne podejście "uwierzytelnianie tokenem" jest bardzo dobre, ale nie należy próbować, aby podstawowe uwierzytelnianie działało inaczej niż powinno (w końcu jest to zdefiniowany standard). Powinieneś raczej używać własnego nagłówka do celów uwierzytelniania. Bardzo dobry opis takiego scenariusza znajdziesz tutaj:

 15
Author: tpeczek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-23 07:32:51

Nie ma potrzeby tworzenia własnych nagłówków ani schematów uwierzytelniania.

Schemat uwierzytelniania Bearer jest zaprojektowany dokładnie dla Twojego przypadku użycia:

Authorization: Bearer e1d9753f-a508-46cc-a428-1787595d63e4

Basic uwierzytelnianie musi być następujące:

Authorization: Basic base64EncodedUsernameAndPassword

Gdzie {[5] } jest równe wyjściu:

base_64_encode(username + ':' + raw_password)

Nie używaj Basic, Jeśli końcowa wartość tekstu nie jest dokładnie powyższym algorytmem.

Jeśli po nazwie schematu chcesz umieścić dowolną wartość, użyj Bearer schemat - po to został wymyślony.

Ostrzeżenie

Chociaż możesz użyć prostego GUID/UUID jako tokena, nie jest to tak naprawdę bezpieczny token. Rozważ użycie JWT zamiast tego. JWTs może być podpisane cyfrowo i przypisane TTL tak, że tylko ustawienie serwera może a) utworzyć go i potwierdzić jego autentyczność i B) upewnić się, że nie jest używany dłużej niż jest dozwolone. Chociaż to Może być prawdą w odniesieniu do Twoich danych przechowywanych w oparciu o identyfikator GUID, podejście JWT nie wymaga stan serwera - więc skaluje się znacznie lepiej - i osiąga to samo.

 25
Author: Les Hazlewood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-07 18:31:19