Co jest dobre dla najwyższego bezpieczeństwa w Internecie

Zarówno JWT, jak i OAuth mogą pomóc w zwiększeniu bezpieczeństwa aplikacji internetowej, oferując bezpieczne uwierzytelnianie i autoryzację. Ale który z nich należy wdrożyć, aby umożliwić użytkownikom bezpieczny dostęp do aplikacji internetowej? Aby odpowiedzieć na to pytanie, przygotowaliśmy szczegółowy artykuł na temat JWT vs. OAuth.

Po przeczytaniu będziesz miał jasne pojęcie o tym, czym są JWT i OAuth, jakie korzyści oferują, czym się różnią i który z nich należy wdrożyć, aby zwiększyć bezpieczeństwo aplikacji internetowych.

Bez zbędnych ceregieli, zanurzmy się.

Co to jest JWT?

JWT, czyli JSON Web Token, to otwarty standard definiujący sposób bezpiecznego udostępniania informacji między dwiema stronami w postaci obiektu JSON. Ponieważ informacje są podpisane cyfrowo, strony mogą ufać informacjom przesyłanym za pośrednictwem tokenów internetowych JSON i je weryfikować.

Stosunkowo niewielki rozmiar tokenów JWT umożliwia ich wysyłanie za pomocą parametru POST, adresu URL lub wewnątrz nagłówka HTTP. Token sieciowy JSON składa się z trzech części: nagłówka, ładunku i podpisu.

Nagłówek informuje, jakiego typu jest token i jakiego rodzaju algorytmu podpisywania. Część ładunku JWT zawiera oświadczenia, które są instrukcjami dotyczącymi użytkowników i dodatkowych danych.

Jak sama nazwa wskazuje, część podpisu tokenu internetowego JSON zawiera podpis umożliwiający sprawdzenie, czy wiadomość nie została po drodze zmodyfikowana.

Jak działają JWT

Źródło obrazu: ROZW

Poniżej przedstawiono działanie tokenu internetowego JSON.

Logowanie użytkownika

Użytkownicy logują się do aplikacji internetowej, podając swoje nazwy użytkownika i hasła. Następnie aplikacja przesyła te dane logowania do serwera uwierzytelniania.

Generowanie tokenów

Gdy serwer uwierzytelniający zweryfikował dane logowania użytkowników, generuje tokeny sieciowe JSON i wysyła je do użytkowników. Te JWT mogą zawierać krytyczne informacje o użytkownikach i sesjach uwierzytelniania. Użytkownicy przechowują te JWT lokalnie. W zależności od ustawień serwer może również podpisywać tokeny JWT przy użyciu wspólnego klucza tajnego lub klucza prywatnego w celu zwiększenia bezpieczeństwa.

Weryfikacja tokena

Gdy użytkownicy wysyłają żądania do serwera aplikacji w celu uzyskania dostępu do dowolnego zasobu, dołączają swoje tokeny JWT do żądań serwera. Twój serwer aplikacji zweryfikuje podpisy w JWT i sprawdzi oświadczenia w ładunkach, aby sprawdzić, czy użytkownicy mają dostęp do żądanych zasobów.

Jeśli JWT są ważne, użytkownicy otrzymają dostęp do żądanych zasobów w aplikacji internetowej.

Przypadki użycia JWT

Tokenów internetowych JSON można używać w następujący sposób:

#1. Upoważnienie

Gdy użytkownicy pomyślnie zalogują się do aplikacji internetowej za pośrednictwem punktu końcowego logowania, serwer uwierzytelniający wystawi im tokeny JWT. Użytkownicy będą korzystać ze swoich tokenów JWT, aby uzyskać dostęp do zasobów aplikacji, które wymagają uwierzytelnienia w celu potwierdzenia ich tożsamości.

Wymiana informacji pomiędzy stronami

JSON Web Token może być właściwą opcją do bezpiecznego przesyłania informacji do ważnych użytkowników. Tokeny internetowe JSON są podpisane, aby mieć pewność, że informacje pochodzą z oryginalnego źródła. Ponadto struktura JWT (część podpisu) umożliwia odbiorcom sprawdzenie, czy informacje nie zostały po drodze zmodyfikowane.

Korzyści z JWT

Poniżej przedstawiono najważniejsze korzyści wynikające z wdrożenia tokenów JWT w aplikacji internetowej.

  • W przeciwieństwie do tokenów SAML, tokeny JWT są lekkie. Dzięki temu można je szybko wdrożyć w środowiskach HTML i HTTPP, dzięki czemu JWT są idealne do aplikacji klienckich, takich jak aplikacje mobilne.
  • JWT oferują solidne zabezpieczenia. Możesz symetrycznie podpisywać JWT za pomocą wspólnego sekretu, używając algorytmu HMAC lub klucza prywatnego, aby podpisywać je asymetrycznie.
  • JWT mają wbudowany mechanizm wygaśnięcia, umożliwiający ustawienie okresu wygaśnięcia JWT w celu zwiększenia bezpieczeństwa.
  • Tokeny internetowe JSON są powszechnie stosowane w różnych rozwiązaniach pojedynczego logowania. W rezultacie praca z JWT jest łatwa.

Co więcej, JWT mogą zaoszczędzić miejsce w bazie danych w Twojej firmie. Dzieje się tak, ponieważ Twój serwer tworzy tylko JWT i są one zapisywane po stronie klienta. Ponadto JWT nie wymagają przeszukiwania bazy danych.

Dzięki temu JWT można szybko zweryfikować, zapewniając użytkownikowi doskonałą obsługę.

Ograniczenia JWT

Chociaż JWT to doskonały sposób na autoryzację użytkowników. Mają pewne ograniczenia, takie jak:

  • Jesteś odpowiedzialny za zapewnienie bezpieczeństwa klucza szyfrującego. Jeśli haker zdobędzie klucz podpisujący Twoje JWT, będziesz miał poważne kłopoty. Mogą tworzyć fałszywe tokeny, które zakłócają dane użytkownika. To ogromne zagrożenie bezpieczeństwa.
  • JWT nie potrzebują wywołania bazy danych dla każdego sprawdzenia, co brzmi dobrze. Jeśli jednak chcesz jak najszybciej je unieważnić, musisz umieścić je na czarnej liście. Nie jest to zadanie szybkie ani proste.
  • Kiedy JWT wygaśnie, nie chodzi tylko o przedłużenie timera. Twój system poprosi użytkownika o ponowne zalogowanie się w celu uzyskania nowego tokena. Zwiększa to złożoność całego procesu i wymaga głębszego przemyślenia doświadczeń użytkowników i przepływów bezpieczeństwa. Aby ułatwić ten proces, możesz zaimplementować tokeny odświeżania w połączeniu z JWT. Po wygaśnięciu tokenu dostępu klienci mogą użyć tych tokenów odświeżania, aby zażądać nowych tokenów dostępu bez konieczności ponownego przesyłania przez klienta danych logowania.
  • Implementowanie JWT w aplikacji internetowej nie jest prostym zadaniem; wymaga dodatkowej pracy inżynieryjnej. Będziesz musiał skonfigurować proces tworzenia tokena, wybrać odpowiedni mechanizm podpisywania pasujący do Twojej aplikacji i zintegrować to wszystko z istniejącą architekturą.

JWT nie są rozwiązaniem jednoetapowym, ale raczej projektem wymagającym starannego planowania i wykonania.

Co to jest OAuth?

OAuth, skrót od otwartej autoryzacji, to otwarty standardowy protokół autoryzacji służący do autoryzacji. Umożliwia aplikacjom internetowym lub witrynom internetowym dostęp do zasobów hostowanych przez aplikacje innych firm w imieniu użytkowników bez udostępniania przez użytkowników danych logowania do aplikacji innych firm.

Obecnie, napisany jako OAuth 2.0 (najnowsza wersja OAuth), jest powszechnie stosowany do uwierzytelniania użytkowników za pośrednictwem serwera uwierzytelniającego.

Na przykład, jeśli masz wdrożony protokół OAuth, użytkownicy mogą logować się do Twojej aplikacji za pomocą swoich kont na Facebooku lub Google. Dane logowania będą jednak wprowadzać tylko na kontach Facebook lub Google.

Jak działa OAuth

Źródło obrazu: Zoho

Masz na przykład aplikację do zarządzania czasem. Aby każdy mógł efektywnie korzystać z Twojej aplikacji, potrzebujesz dostępu do jego skrzynek e-mailowych. Wcześniej użytkownicy musieli udostępniać aplikacji swoje dane logowania, aby umożliwić jej dostęp do ich skrzynek odbiorczych. OAuth2.0 rozwiązał ten problem.

Oto jak wygląda przepływ pracy OAuth2.0:

  • Twoja aplikacja do zarządzania czasem (klient) żąda dostępu do chronionych zasobów; w tym przypadku jest to skrzynka odbiorcza użytkownika, której właścicielem jest użytkownik (właściciel zasobu). Twoja aplikacja robi to, wysyłając użytkownika do autoryzowanego punktu końcowego.
  • Właściciel zasobu (użytkownik) uwierzytelnia i autoryzuje żądanie dostępu do zasobu z aplikacji do zarządzania czasem. Klient (Twoja aplikacja) otrzyma autoryzację z autoryzowanego punktu końcowego.
  • Twoja aplikacja poprosi o token dostępu z serwera autoryzacyjnego, aby uzyskać dostęp do skrzynki odbiorczej użytkownika. Dokona tego poprzez złożenie zezwolenia i własne uwierzytelnienie tożsamości.
  • Jeśli tożsamość Twojej aplikacji została uwierzytelniona, a autoryzacja jest ważna, Twoja aplikacja otrzyma token dostępu umożliwiający dostęp do skrzynki odbiorczej użytkownika.
  • Jeśli token dostępu jest ważny, Twoja aplikacja może teraz uzyskać dostęp do danych użytkownika (skrzynki odbiorczej użytkownika), przesyłając token dostępu do uwierzytelnienia.
  • Teraz Twoja aplikacja do zarządzania czasem może uzyskać dostęp do skrzynki odbiorczej użytkownika. Podobnie jak Oauth różne rodzaje dotacjiprzepływ autoryzacji może się nieznacznie różnić w zależności od rodzaju udzielonej autoryzacji.

    Korzyści z OAuth

    Poniżej przedstawiono najważniejsze zalety korzystania z protokołu OAuth.

    • OAuth jest powszechnie akceptowanym standardem. Oznacza to, że wszystkie wiodące usługi uwierzytelniania rozumieją protokół OAuth i go używają.
    • Użytkownicy znajdą do wyboru wiele wtyczek i funkcji OAuth, dzięki szerokiemu zastosowaniu i kompatybilności.
    • OAuth oferuje przetestowane biblioteki klienckie dla prawie wszystkich języków programowania i frameworków internetowych. Dzięki OAuth możesz więc używać preferowanego języka.
    • OAuth jest wysoce bezpieczny i dobrze sprawdzony. Ponieważ jest tak szeroko stosowany, eksperci rozważyli już wszystkie możliwe zagrożenia bezpieczeństwa.
    • OAuth doskonale nadaje się do oddzielania kodu. Twój główny kod aplikacji nie ulega zepsuciu podczas obsługi zadań uwierzytelniania. Ułatwia to zarządzanie aplikacją i jej aktualizację w dłuższej perspektywie.

    Przypadki użycia OAuth

    Oto kilka popularnych przypadków użycia protokołu OAuth:

    • Najczęstszym zastosowaniem protokołu OAuth 2.0 jest tworzenie aplikacji innych firm w celu uzyskania dostępu do kont użytkowników. Dzięki OAuth 2.0 użytkownicy mogą upoważniać osoby trzecie do dostępu do ich danych przechowywanych w różnych usługach bez konieczności podawania osobom trzecim danych logowania do tych usług.
    • Jako właściciel aplikacji internetowej możesz zastosować protokół OAuth 2.0 do wdrożenia pojedynczego logowania. Możesz zapoznać się z rozwiązaniami OAuth typu open source dla swojego projektu.
    • Możesz zaimplementować OAuth 2.0 w swojej bramie API, aby brama API działała jako serwer autoryzacji. Dzięki temu brama API będzie przesyłać dalej żądania od klientów posiadających ważne tokeny dostępu.
    • OAuth 2.0 może umożliwić IoT i inteligentnym urządzeniom, takim jak lodówki czy telewizory, interakcję z interfejsami API innych firm w imieniu użytkowników. Przydaje się to, gdy użytkownik chce zalogować się do aplikacji na gadżetach bez zwykłej klawiatury, takich jak telewizor Smart TV lub konsola do gier.

    Ograniczenia protokołu OAuth

    Zakres dostępnych przepływów może być zniechęcający dla osób, które dopiero zaczynają korzystać z protokołu OAuth. Nie chodzi tylko o wybranie jednego; czasami potrzebujesz kombinacji, aby spełnić wszystkie wymagania bezpieczeństwa. Ta złożoność może sprawić, że początkującym będzie trudno wiedzieć, od czego zacząć, czego używać i jak skutecznie to zintegrować.

    Każdy przepływ służy unikalnemu celowi, czy to w przypadku aplikacji mobilnych, komunikacji między serwerami, czy aplikacji internetowych. Dlatego przed dokonaniem wyboru niezbędna jest dokładna analiza konkretnych potrzeb.

    Aby zapewnić bezpieczeństwo, protokół OAuth 2.0 zależy od protokołu SSL/TLS. Jeśli SSL/TLS nie jest prawidłowo skonfigurowany, bezpieczeństwo OAuth 2.0 może być zagrożone.

    Ponadto OAuth może powodować problemy związane z prywatnością, szczególnie podczas śledzenia aktywności użytkownika. Gdy korzystasz z usługi takiej jak „Zaloguj się przez Google”, Google może dowiedzieć się o Twojej aktywności w witrynie strony trzeciej. Google może nie tylko wiedzieć, że się zalogowałeś, ale może także śledzić, jak często i kiedy wchodzisz w interakcję z tą witryną.

    Co więcej, OAuth może być przesadą w przypadku prostszych konfiguracji, takich jak aplikacja z samym interfejsem i zapleczem. W takich przypadkach możesz nie potrzebować jego złożoności.

    Różnica między JWT i OAuth

    JWT i OAuth pełnią kluczową funkcję weryfikacji tożsamości użytkownika w celu autoryzacji dostępu do zasobów. Są to niezbędne narzędzia w krajobrazie bezpieczeństwa, ale różnią się zakresem, złożonością i zastosowaniem.

    FunkcjeJWTsOAuthGłówne zastosowanieJWT skupiają się głównie na interfejsach API.OAuth obejmuje aplikacje internetowe, przeglądarki, API i inne.Token a protokółJWT to format tokena.OAuth to protokół autoryzacji.PrzechowywanieJWT opiera się wyłącznie na pamięci po stronie klienta.OAuth wykorzystuje zarówno po stronie klienta, jak i pamięć po stronie serwera. Elastyczność JWT mają bardziej ograniczony zakres. OAuth oferuje większą elastyczność i szerszy zakres przypadków użycia. Łatwość użyciaJWT są prostsze i łatwiejsze do zrozumienia. OAuth jest bardziej złożony.

    Chociaż JWT są prostsze i nastawione na bezpieczeństwo API, OAuth zapewnia kompleksowe rozwiązanie mechanizmu uwierzytelniania, które można dostosować do różnych scenariuszy.

    OAuth może umożliwić użytkownikom zezwolenie aplikacji innej firmy na dostęp do ich danych na innej platformie bez ujawniania danych logowania.

    To, czy któryś jest lepszy, zależy od konkretnych potrzeb danego systemu lub sieci.

    Czy możesz używać JWT i OAuth razem?

    Chociaż JWT i OAuth służą różnym celom, możesz je połączyć.

    Protokół OAuth nie określa żadnego formatu tokena, który musi być ściśle używany. Możesz więc zaimplementować JWT w OAuth.

    Na przykład serwer uwierzytelniania OAuth2 może wystawić token dostępu zawierający tokeny JWT. Ten JWT może zawierać dodatkowe informacje w ładunku, poprawiając wydajność. Dzieje się tak dlatego, że podróże w obie strony między serwerami uwierzytelniającymi a serwerami zasobów zostaną zmniejszone.

    Łączenie tokenów JWT i OAuth2 może również odbywać się przy użyciu podejścia z dwoma tokenami — w tej metodzie OAuth2 wystawia dwa oddzielne tokeny: token dostępu i token JWT. JWT zawiera dodatkowe informacje o tożsamości. Takie podejście zapewnia dodatkową warstwę szczegółów, dając większą kontrolę nad dostępem użytkowników i danymi.

    Decydując się na tę strategię podwójnego tokena, niezwykle istotne jest korzystanie z OpenID Connect Connect. OpenID Connect opiera się na OAuth2 i dodaje do tokenów bardziej ustandaryzowane pola.

    Używanie JWT zamiast OAuth2 może sprawić, że określone zadania będą szybsze i mniej skomplikowane. Ale może też utrudniać rozwój.

    Decydując się na użycie JWT z OAuth2, zastanów się, czy zwiększenie szybkości uzasadnia dodatkową pracę w zakresie programowania.

    Wniosek

    W bitwie JWT kontra OAuth o najwyższe bezpieczeństwo w sieci każdy z nich ma zalety i wady. JWT wyróżnia się bezstanowym, szybkim uwierzytelnianiem, ale ma ograniczenia, takie jak brak wbudowanego odwołania. OAuth sprawdza się w złożonych scenariuszach autoryzacji, ale może być przesadą w przypadku prostszych projektów.

    Jeśli potrzebujesz niezawodnej autoryzacji i wydajnego uwierzytelniania, rozważ połączenie JWT i OAuth za pośrednictwem OpenID Connect.

    Twój wybór powinien zależeć od konkretnych potrzeb projektu, a nie tylko szumu wokół tych technologii.

    Ponadto możesz zapoznać się z popularnymi platformami uwierzytelniania użytkowników, aby wybrać najlepsze rozwiązanie dla swojej aplikacji.