• logto
  • api
  • ochrona
  • JWT
  • autoryzacja

Metody autoryzacji API

W tym artykule zgłębimy trzy powszechne mechanizmy autoryzacji API: klucze API, podstawową autoryzację oraz tokeny OAuth JWT. Na końcu omówimy, jak Logto może pomóc Ci chronić Twoje API za pomocą tokenów OAuth JWT.

Simeng
Simeng
Developer

Wprowadzenie

W dzisiejszym świecie, API są kręgosłupem nowoczesnych aplikacji. Są one głównym sposobem na dostęp do danych i funkcji z usług backendu. API umożliwiają różnym systemom oprogramowania z różnych źródeł komunikację i wymianę danych, dzięki czemu są niezbędne dla biznesu. Jednakże API są również częstym celem ataków. Potrzeba ochrony API jest silniejsza niż kiedykolwiek.

Ochrona API to proces zabezpieczania API przed nieautoryzowanym dostępem, nadużyciem i atakami. Jest to krytyczny element każdej strategii API. W tym artykule zgłębimy trzy powszechne mechanizmy ochrony API: klucze API, podstawową autoryzację oraz tokeny OAuth JWT. Na końcu pokażemy również, jak Logto chroni Twoje API za pomocą tokenów OAuth JWT.

Klucze API

Klucz API to najbardziej prosty i powszechnie stosowany sposób zabezpieczania API. Klucz API to długi ciąg znaków generowany przez dostawcę API i udostępniany autoryzowanym użytkownikom. Ten klucz musi być dołączony do nagłówka żądania podczas dostępu do API. Klucze API są proste i skuteczne w podstawowych wymaganiach dotyczących bezpieczeństwa. Na przykład popularne usługi, takie jak Google Maps API i AWS, udostępniają klucze API do kontroli dostępu i monitorowania użycia. Jednakże mają one ograniczenia pod względem bezpieczeństwa. Często są używane do komunikacji maszyna-maszyna.

e.g.

Zalety:

  • Proste do wdrożenia: Klucze API są łatwe do wdrożenia i używania. Polega to na dołączeniu klucza do nagłówka żądania, co czyni to prostą metodą dla deweloperów i klientów do zrozumienia i zastosowania.
  • Łatwe do monitorowania: Klucze API są łatwe do monitorowania. Możesz śledzić użycie każdego klucza i cofnąć go w razie potrzeby.
  • Skuteczne ograniczanie liczby żądań: Klucze API są skuteczne przy ograniczaniu liczby żądań. Można ustawić limit liczby żądań na klucz w celu zapobieżenia nadużyciom.
  • Odpowiednie dla danych niepoufnych: Klucze API są odpowiednie dla danych niepoufnych lub powszechnie dostępnych API, gdzie wymagania dotyczące bezpieczeństwa są mniejsze.

Wady:

  • Ograniczone bezpieczeństwo: Klucze API nie są wystarczająco bezpieczne dla danych wrażliwych, szczególnie w aplikacjach klienckich. Często są stosowane w komunikacji maszyna-maszyna.
  • Nieodpowiednie do autoryzacji użytkownika: Klucze API są powiązane z aplikacjami lub systemami, a nie z indywidualnymi użytkownikami, co utrudnia identyfikację konkretnych użytkowników lub śledzenie ich działań.
  • Brak ważności tokenu: Klucze API są zazwyczaj statyczne i nie wygasają. Jeśli klucz zostanie skompromitowany, może być nieprawidłowo używany bez końca, chyba że zostanie ręcznie wygenerowany ponownie.

Podstawowa autoryzacja

Podstawowa autoryzacja to kolejna powszechna metoda zabezpieczania API. Jest to prosty schemat autoryzacji wbudowany w protokół HTTP. Polega na przesłaniu nazwy użytkownika i hasła w nagłówku żądania. Serwer następnie weryfikuje poświadczenia i zwraca żądany zasób, jeśli są one prawidłowe. Na przykład wiele aplikacji internetowych i API RESTful używa podstawowej autoryzacji jako szybkiej i łatwej metody autoryzacji użytkowników. Podstawowa autoryzacja jest bardziej bezpieczna niż klucze API, ponieważ używa nazwy użytkownika i hasła zamiast statycznego klucza. Niemniej jednak nadal nie jest wystarczająco bezpieczna dla danych wrażliwych, gdyż dane poświadczeń są przesyłane w postaci niezaszyfrowanej, co sprawia, że są podatne na przechwycenie. Podstawowa autoryzacja jest odpowiednia dla systemów wewnętrznych, gdzie połączenie sieciowe jest bezpieczne, np. komunikacja maszyna-maszyna.

e.g.

lub

Zalety:

  • Silniejsze bezpieczeństwo: Podstawowa autoryzacja jest bardziej bezpieczna niż klucze API, ponieważ używa nazwy użytkownika i hasła zamiast statycznego klucza.
  • Szeroka kompatybilność: Podstawowa autoryzacja jest szeroko przyjęta i wspierana przez większość serwerów internetowych i przeglądarek.
  • Prostota: Podobnie jak klucze API, podstawowa autoryzacja jest stosunkowo prosta do ustawienia i używania.

Wady:

  • Ekspozycja poświadczeń: Podstawowa autoryzacja przesyła poświadczenia w postaci niezaszyfrowanej, co sprawia, że są podatne na przechwycenie, jeśli nie są używane przez bezpieczne połączenie (HTTPS).
  • Brak ważności tokenu: Podstawowa autoryzacja nie wspiera ważności tokenu. Jeśli token zostanie skompromitowany, może być nieprawidłowo używany bez końca, chyba że zostanie ręcznie wygenerowany ponownie.

Tokeny OAuth JWT

JSON Web Token (JWT), zdefiniowany przez RFC 7519, jest otwartym standardem do bezpiecznego przekazywania informacji między stronami jako obiekt JSON. Jest on powszechnie stosowany w autoryzacji i uwierzytelnianiu w aplikacjach internetowych i API.

Podpisany token JWT ma następujący format:

Składa się z trzech części oddzielonych .: nagłówka, ładunku i podpisu.

Oto przykład tokenu JWT:

  • nagłówek: zawiera informacje o typie tokenu i algorytmie haszującym używanym do jego podpisania.
  • ładunek: zawiera żądania (oświadczenia) dotyczące użytkownika i inne dane.
  • podpis: jest haszem nagłówka i ładunku, podpisanym przy użyciu tajnego klucza.

OAuth to kompleksowy otwarty standard do zabezpieczania API oraz do delegacji dostępu, powszechnie stosowany jako sposób na umożliwienie użytkownikom przekazywania witrynom lub aplikacjom dostępu do ich informacji na innych witrynach bez podawania haseł.

W połączeniu z JWT, tokeny OAuth JWT oferują solidne rozwiązanie bezpieczeństwa. Zamiast przekazywać wrażliwe informacje takie jak nazwy użytkowników i hasła przy każdym żądaniu, tokeny OAuth JWT są wydawane autoryzowanym klientom po pomyślnym uwierzytelnieniu. Te tokeny zawierają informacje o użytkowniku i jego uprawnieniach. Dodatkowo tokeny JWT są cyfrowo podpisane, co zapewnia odporność na manipulacje, i mogą wygasnąć, co zapewnia dodatkową warstwę bezpieczeństwa.

Jedną z kluczowych zalet tokenów OAuth JWT jest ich elastyczność. Mogą być używane w różnych typach aplikacji, w tym aplikacjach internetowych i mobilnych, rozwiązaniach jednokrotnego logowania i innych. Na przykład główne platformy społecznościowe, takie jak Facebook, Twitter i LinkedIn, używają tokenów OAuth JWT do uwierzytelniania użytkowników i umożliwienia aplikacjom zewnętrznym bezpiecznego dostępu do danych użytkowników.

Zalety:

  • Zwiększone bezpieczeństwo: Tokeny OAuth JWT zapewniają wyższy poziom bezpieczeństwa. Są cyfrowo podpisane i mogą być zaszyfrowane, co zmniejsza ryzyko nieautoryzowanego dostępu i manipulacji danymi.
  • Tożsamość użytkownika i kontrola dostępu: Tokeny JWT mogą przenosić informacje o tożsamości użytkownika i zawierać żądania, które określają, jakie akcje lub zasoby użytkownik jest autoryzowany do dostępu.
  • Drobiazgowa kontrola dostępu: Tokeny JWT mogą być używane do implementacji drobiazgowej kontroli dostępu. Na przykład możesz określić, jakie zasoby użytkownik może uzyskać dostęp i jakie akcje może na nich wykonywać.
  • Ważność tokenu: Tokeny OAuth JWT mogą być ustawione na wygaśnięcie po określonym czasie, co zmniejsza ryzyko niewłaściwego użycia.

Wady:

  • Złożoność: Tokeny OAuth JWT są bardziej skomplikowane niż klucze API i podstawowa autoryzacja. Wymagają dodatkowych kroków w konfiguracji i użyciu.
  • Zarządzanie tokenami: Tokeny OAuth JWT muszą być zarządzane i odwoływane w razie potrzeby. Może to być wyzwanie w aplikacjach na dużą skalę z wieloma użytkownikami i klientami.
  • Zużycie zasobów: Generowanie i weryfikowanie tokenów może mieć pewien narzut na wydajność, co może być problemem w scenariuszach o dużym ruchu.

Ochrona API za pomocą Logto

Wybór metody uwierzytelniania zależy od specyficznych wymagań i kwestii bezpieczeństwa aplikacji. Klucze API są proste, ale mniej bezpieczne, podstawowa autoryzacja oferuje większe bezpieczeństwo, ale brakuje jej funkcji tożsamości użytkownika, natomiast tokeny OAuth JWT zapewniają solidne bezpieczeństwo i funkcje tożsamości użytkownika, ale zwiększają złożoność we wdrożeniu i zarządzaniu.

Logto zapewnia prosty i bezpieczny sposób ochrony Twojego API za pomocą tokenów OAuth JWT. Obsługuje zarówno standardy OAuth 2.0, jak i OpenID Connect (OIDC), pozwalając Ci wybrać metodę uwierzytelniania najlepiej pasującą do Twoich potrzeb. Możesz użyć przepływu client_credentials do komunikacji maszyna-maszyna oraz przepływu authorization_code do aplikacji internetowych.

Komunikacja maszyna-maszyna

Logto używa przepływu client_credentials dla aplikacji typu komunikacja maszyna-maszyna. Ten przepływ jest odpowiedni dla komunikacji na serwerze backend, gdzie klient jest zaufanym klientem, który może bezpiecznie przechowywać poświadczenia klienta. Jest również znany jako „OAuth dwunożny”, ponieważ nie obejmuje użytkownika. Poświadczenia klienta są używane bezpośrednio jako przyznanie autoryzacji do uzyskania tokenu dostępu.

Proces integracji jest prosty i łatwy do zrealizowania:

  1. Stwórz zasób API w Logto Console.
  2. Stwórz klienta maszyna-maszyna w Logto Console.
  3. Wyślij żądanie do punktu końcowego tokenu w Logto, aby zdobyć token dostępu.
  1. Uzyskaj dostęp do chronionego zasobu za pomocą tokenu dostępu.

Proszę sprawdzić naszą dokumentację integracji maszyna-maszyna dla więcej szczegółów.

Aplikacje internetowe

Dla klientów publicznych, takich jak aplikacje internetowe, Logto używa przepływu authorization_code do uwierzytelniania użytkowników. Ten przepływ jest odpowiedni dla aplikacji internetowych, gdzie klient jest klientem publicznym, który nie może bezpiecznie przechowywać poświadczeń klienta. Jest również znany jako „OAuth trzynożny”, ponieważ obejmuje użytkownika. Użytkownik zostaje przekierowany do serwera autoryzacji, aby uwierzytelnić i autoryzować klienta. Klient następnie używa kodu autoryzacji do uzyskania tokenu dostępu.

Proces integracji jest nieco bardziej skomplikowany niż w przypadku przepływu maszyna-maszyna:

Proszę sprawdzić nasz artykuł Chroń swoje Express.js API przy użyciu JWT i Logto jako kompleksowy przykład, jak zintegrować Logto z Reactem i uzyskać dostęp do API serwera Express przy użyciu tokenów JWT.