Uwierzytelnianie oparte na tokenach
Stary i zaufany mechanizm uwierzytelniania, który opiera się na hasłach, ale w inteligentniejszy sposób.
W systemach komputerowych token to obiekt lub struktura służąca do przesyłania danych między aplikacjami. Tokeny są używane głównie przez aplikacje bezstanowe jako narzędzie do przechowywania danych sesji po stronie klienta. Na przykład aplikacja zakupowa może śledzić takie rzeczy, jak koszyk zakupowy, dane uwierzytelniające i inne dane związane z sesją w tokenie przechowywanym przez klienta, zamiast utrzymywać i śledzić stan sesji w samej aplikacji. W ten sposób umożliwia to aplikacji działanie bezstanowe.
Tokeny uwierzytelniające
Tokeny uwierzytelniające, to rodzaj tokena używanego do przesyłania danych związanych z uwierzytelnianiem między klientem a serwerem lub między aplikacjami. Na przykład rozwiązania typu Federation Identity, takie jak SAML i OpenID Connect, polegają na tokenach uwierzytelniających do wymiany informacji (związanych z uwierzytelnianiem) między stronami. Tokeny internetowe JSON (JWT) to inny rodzaj tokena używanego do wymiany danych uwierzytelniających w bardziej zastrzeżonych protokołach uwierzytelniania.
Tokeny uwierzytelniające na ogół składają się z trzech części – nagłówka, payloadu i podpisu. Nagłówek zazwyczaj identyfikuje użytkownika za pomocą czegoś w rodzaju nazwy użytkownika. Payload zawiera wszystkie oświadczenia uwierzytelniania skojarzone z użytkownikiem i sesją. Podpis to podpis cyfrowy, który gwarantuje integralność i autentyczność oświadczeń w payloadzie.
Tokeny uwierzytelniające mogą być podpisane cyfrowo, aby chronić ich integralność i umożliwić odbiorcy weryfikację tożsamości nadawcy. Ponieważ dane przechowywane przez klienta podlegają manipulacji, należy zachować szczególną ostrożność, aby zapobiec manipulacji danymi. Skutecznym sposobem na osiągnięcie tego jest użycie podpisów cyfrowych. Po podpisaniu wszelkie zmiany danych można łatwo wykryć. Podrobienie prawidłowo zaimplementowanego podpisu jest uważane za niemożliwe.
Uwierzytelnianie oparte na tokenach – szyfrowanie
Szyfrowanie tokenów uwierzytelniających gwarantuje poufność ich danych. Bez szyfrowania każdy może odczytać dane, z których niektóre mogą być poufne i mogą dostarczyć atakującemu przydatne informacje.
Popularne formaty tokenów uwierzytelniających obejmują SAML. Opiera się on na tagowaniu XML, oraz JWT, który jest oparty na obiekcie danych JSON.
Ale to, co sprawia, że tokeny uwierzytelniające są szczególnie atrakcyjne dla programistów, to to, że umożliwiają tworzenie aplikacji bezstanowych. Oznacza to, że serwer nie musi śledzić sesji uwierzytelnionych. Zamiast tego dane te są śledzone przez informacje po stronie klienta przechowywane w tokenie uwierzytelniającym.
Po uwierzytelnieniu klient otrzymuje z serwera uwierzytelniania podpisany i często zaszyfrowany token uwierzytelniający. Następnie dołącza się go do każdego żądania wysyłanego do aplikacji, z którymi chce współpracować. Aplikacja weryfikuje integralność tokenu uwierzytelniającego i analizuje jego zawartość. Jeśli wszystko się powiedzie, żądanie jest przetwarzane przez aplikację i dostarczana jest odpowiedź. Kolejne żądanie wysłane przez klienta ponownie będzie zawierało token uwierzytelniający, a proces weryfikacji jego integralności i parsowania jego zawartości zostanie powtórzony przez aplikację.
Federacja tożsamości szeroko wykorzystuje tokeny uwierzytelniania. Systemy Federation Identity umożliwiają stronom zaufanym (tj. aplikacjom) korzystanie z usług uwierzytelniania (od zaufanego dostawcy tożsamości – (IdP)) bez potrzeby ścisłej integracji. W takich systemach dane uwierzytelniające i autoryzacyjne wymieniane są z pominięciem tokenów uwierzytelniających.
Ogólna konfiguracja
Bez wchodzenia w szczegółowe informacje, ogólna konfiguracja schematów federacyjnego uwierzytelniania i autoryzacji (authN/authZ) wygląda następująco:
- Użytkownik próbuje uzyskać dostęp do zasobu/aplikacji, do którego dostęp jest ograniczony.
- Ponieważ zasób/aplikacja nie implementuje własnej funkcji authN/authZ, przekierowuje użytkownika do dostawcy tożsamości (IdP) w celu uwierzytelnienia.
- Użytkownik jest uwierzytelniany przez dostawcę tożsamości, który następnie tworzy podpisany cyfrowo token (uwierzytelniający) potwierdzający, że użytkownik został pomyślnie uwierzytelniony i przekazuje ten token użytkownikowi.
- Użytkownik jest następnie przekierowywany z powrotem do zasobu/aplikacji, do którego chce uzyskać dostęp, i przekazuje token uwierzytelniający otrzymany od dostawcy tożsamości.
- Zasób/aplikacja odczytuje token uwierzytelniający, weryfikuje jego podpis i sprawdza jego oświadczenia, aby upewnić się, że użytkownik spełnia kryteria dostępu.
Formaty tokenów
Typowe formaty tokenów uwierzytelniania to SAML, OpenID Connect i JWT. W przypadku oświadczeń autoryzacyjnych powszechnie używanym standardem i formatem jest OAUTH2. I chociaż każdy token ma własne określone struktury danych, typy oświadczeń i konwencje podpisów cyfrowych, wszystkie są tokenami o tych samych podstawowych konstrukcjach — identyfikatorze, zestawie oświadczeń i podpisie cyfrowym od podmiotu składającego oświadczenia.
Typowe ataki na uwierzytelnianie oparte na tokenach obejmują kradzież tokenów uwierzytelniających przy użyciu złośliwego oprogramowania i ataki typu cross-site scripting.
Złośliwe oprogramowanie znajdujące się na kliencie może odczytać prawidłowy token uwierzytelniający i ponownie go wykorzystać, o ile nie wygasł.
Ataki XSS (cross-site scripting) są prawdopodobnie najbardziej znaną formą ataków na tokeny uwierzytelniające. Złośliwy kod JavaScript (JS), który odczytuje tokeny uwierzytelniające, jest wstrzykiwany przez atakującego do zaufanej witryny. Następnie jest dostarczany użytkownikowi przez witrynę i wykonywany przez przeglądarkę, w której odczytuje token uwierzytelniający i następnie wysyła go do atakującego. Po uzyskaniu ważnego tokena osoba atakująca może go użyć, aby uzyskać dostęp do chronionych zasobów. Na przykład aplikacja WWW, która umożliwia użytkownikom publikowanie komentarzy, nie sprawdza prawidłowo i nie oczyszcza ciągów publikowanych przez użytkowników. W rezultacie atakujący zamieszcza komentarz ze znacznikiem