Protokoły uwierzytelniania stron internetowych
Systemy uwierzytelniania są kręgosłupem wielu stron internetowych. Pozwalają użytkownikom logować się do Twojej witryny i zachować dane pomiędzy wizytami. Jest to kluczowe w oferowaniu solidnego doświadczenia użytkownika, który nagradza swoich użytkowników za dostarczanie swoich danych. Uwierzytelnianie często zapewnia dostęp do prywatnych danych osobowych, które jeśli zostaną upublicznione, mogą zaszkodzić Twojemu użytkownikowi. Aby temu zapobiec, protokoły uwierzytelniania zostały stworzone w celu zabezpieczenia żądań, jednocześnie pozwalając użytkownikom nadal bezpiecznie logować się do Twojego systemu z dowolnego środowiska.
Podstawowe SSL Auth
Podstawowe auth jest najprostszą formą uwierzytelniania sieciowego. Wykorzystuje standardowe nagłówki HTTP w miejsce bardziej skomplikowanych rozwiązań, które opierają się na ciasteczkach, identyfikatorach sesji i stronach logowania. W podstawowy system autoryzacji wbudowane jest bardzo mało zabezpieczeń. Dane uwierzytelniające są przesyłane tylko w kodowaniu Base64 i nie są szyfrowane ani haszowane. Ze względu na wbudowane zabezpieczenia w systemie, żądania te są najczęściej wykonywane przez HTTPS.
Informacje autoryzacyjne powinny być skompilowane do następującego formatu i zawarte w nagłówku:
Format:
<!--Authorization: Basic -->
Pełne szczegóły na temat protokołu Basic Authentication można znaleźć tutaj: http://www.w3.org/Protocols/HTTP/1.0/spec.html#AA
Digest Auth
Digest Auth działa podobnie do podstawowego uwierzytelniania SSL z tym wyjątkiem, że hasło jest szyfrowane przy użyciu jednokierunkowego hasha. Wykorzystuje on kryptograficzne haszowanie MD5 z nonce (wartość generowana przez serwer, która zapobiega atakom powtórzenia).
Typowy przepływ żądania Digest Auth jest następujący:
- Użytkownik przechodzi do strony, która wymaga uwierzytelnienia użytkownika.
- Serwer odpowiada komunikatem 401, który oznacza, że użytkownik nie jest obecnie upoważniony do dostępu do zawartości. W odpowiedzi znajduje się również nonce, który będzie używany podczas autoryzacji, aby zapobiec atakom powtórzenia,
- Strona następnie wyświetla interfejs uwierzytelniania w celu zebrania wymaganych szczegółów (nazwa użytkownika i hasło).
- Dostarczone szczegóły są ponownie wysyłane do serwera z nagłówkiem uwierzytelniania zawartym w żądaniu, które ma kod odpowiedzi.
- Serwer następnie zweryfikuje dostarczone dane uwierzytelniające i zaakceptuje uwierzytelnienie lub zwróci wiadomość 401, jeśli dane uwierzytelniające są nieprawidłowe, co spowoduje, że użytkownik zostanie ponownie poproszony o podanie interfejsu uwierzytelniania.
Pełne szczegóły na temat protokołu Digest Auth można znaleźć tutaj: https://www.ietf.org/rfc/rfc2617.txt
OAuth 1.0
Protokół OAuth 1.0 opiera się na posiadaniu współdzielonego sekretu między serwerem a witryną. Ten wspólny sekret jest używany do generowania podpisu, który jest zawarty w żądaniu. Wygenerowany podpis jest używany do weryfikacji po stronie serwera ważności żądania uwierzytelnienia. Proces autoryzacji użytkownika jest zazwyczaj obsługiwany w trzech krokach (3-legged OAuth):
- Serwis uzyskuje Request Token.
- Użytkownik autoryzuje Request Token.
- Serwis wymienia Request Token na Access Token.
Proces wypełniania trójstopniowego żądania OAuth będzie ogólnie obsługiwany w następujący sposób:
-
Strona wyśle podpisane żądanie o token Request. Żądanie to powinno zawierać następujące parametry:
- oauth_consumer_key
- oauth_timestamp
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- oauth_callback
.
To żądanie zostanie zweryfikowane na serwerze i jeśli zostanie zweryfikowane, zwróci token żądania w następującym formacie:
- oauth_token
- oauth_token_secret
- oraz wszelkie inne dodatkowe parametry zwracane przez Twój serwer.
- Kolejnym krokiem po pobraniu tokena żądania jest poproszenie użytkownika o wprowadzenie danych uwierzytelniających do logowania. Są one następnie formatowane do podpisu z tokenem żądania oauth_token i wysyłane z żądaniem z powrotem do serwera w celu sprawdzenia poprawności. Po pomyślnej walidacji tego żądania serwer zwróci następujące dane:
- oauth_token
- oauth_verifier
Będą one użyte w następnym kroku do pobrania tokena dostępu.
- Ostatnim krokiem jest wymiana pobranych danych z kroku 2 na token dostępu, który będzie używany do uzyskania dostępu do zasobów serwera. Aby wymienić swój token żądania na token dostępu, możesz wysłać do serwera żądanie o następującej treści: signed request
- oauth_token -returned from step 2
- oauth_consumer_key
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- oauth_verifier -.zwrócony z kroku 2
To zwróci ci token dostępu, który ma być używany w połączeniu z twoim sekretem w celu żądania informacji od serwera.
Pełne szczegóły na temat protokołu OAuth 1.0 można znaleźć tutaj: https://tools.ietf.org/html/rfc5849
OAuth 2.0
Jest on podobny do protokołu OAuth 1.0, polega na id klienta i sekrecie w celu sformatowania żądania, ale upraszcza wiele ze skomplikowanego procesu podpisywania, który jest nieodłączny w systemie OAuth 1.0. Proces autoryzacji użytkownika za pomocą trójstopniowego protokołu OAuth 2.0 jest następujący:
-
Użytkownik jest kierowany do usługi w celu autoryzacji z następującymi szczegółami zawartymi w autoryzacyjnym adresie URL:
- client_id
- redirect_uri
- response_type
- scope
-
Użytkownik następnie uwierzytelnia się w usłudze i przyznaje aplikacji dostęp do swoich danych. Po pomyślnym uwierzytelnieniu użytkownik jest przekierowywany z powrotem do redirect_uri z następującymi parametrami:
- code
- state
-
Kod zwrócony w kroku 2 jest następnie wykorzystywany przez aplikację do złożenia wniosku o token dostępu. W tym żądaniu powinny być zawarte:
- client_id
- client_secret
- code
- redirect_uri
- grant_type – Powinien być ustawiony na „authorization_code”
Serwer zweryfikuje te szczegóły, a następnie zwróci token dostępu z czasem wygaśnięcia, jeśli są one ważne. Są one zazwyczaj zwracane w następującym formacie:
- access_token
- expires_in
- refresh_token
Pełne szczegóły na temat protokołu OAuth 2.0 można znaleźć tutaj: http://oauth.net/2/
Protokoły uwierzytelniania pozwalają na zabezpieczenie danych z różnym poziomem bezpieczeństwa. W zależności od dostępnych danych i pożądanego poziomu bezpieczeństwa, wdrożenie jednego z powyższych protokołów pozwala mieć pewność, że dane są bezpieczne, a dostęp do nich mają tylko użytkownicy, którzy są dopuszczeni do systemu.