8 rozwiązań Open Source do autoryzacji/uwierzytelniania (OAuth) dla Twojego następnego projektu

Logowanie za pomocą kont społecznościowych i przesyłanie plików z chmury – jak to działa?

Czy kiedykolwiek zdarzyło Ci się logować na stronie internetowej, korzystając z konta Google, Facebook, LinkedIn lub GitHub? A może przesyłałeś pliki na stronę bezpośrednio z chmury, na przykład z Google Drive? To wszystko są przykłady sytuacji, w których aplikacje internetowe uzyskują dostęp do Twoich danych przechowywanych w innych serwisach. Jak to jest możliwe bez narażania Twoich poufnych informacji i bez podawania danych logowania stronom trzecim?

Weźmy na tapetę Facebooka. Ta platforma może chcieć wykorzystać Twoje kontakty z konta Google, aby pomóc Ci odnaleźć znajomych na Facebooku. W tym celu musisz przyznać Facebookowi uprawnienia dostępu do Twojego konta Google.

Jakiś czas temu, rozwiązanie tego problemu było dość prymitywne. Użytkownik podawał Facebookowi swój adres e-mail Google i hasło, a Facebook logował się na Twoje konto w Twoim imieniu, aby pobrać kontakty. Wiele aplikacji, nie tylko Facebook, korzystało z takiego sposobu autoryzacji dostępu do danych z innych serwisów.

W obliczu tak powszechnego podejścia, użytkownicy znajdowali się w niezręcznej sytuacji. Musieli bowiem ryzykować bezpieczeństwo swoich danych, aby móc korzystać z różnych usług. Nieuczciwy programista mógł z łatwością wykorzystać dane uwierzytelniające użytkowników w niecnych celach. To właśnie te zagrożenia stały się impulsem do rozwoju protokołu OAuth.

Zgodnie z definicją Internet Engineering Task Force (IETF), OAuth to struktura autoryzacji, która umożliwia aplikacjom zewnętrznym dostęp do usług w imieniu właściciela zasobu. OAuth pozwala użytkownikom przyznawać aplikacjom trzecim ograniczony dostęp do swoich zasobów.

Dzięki OAuth aplikacje mogą uzyskiwać dostęp do zasobów online, takich jak profile użytkowników czy dane osobowe przechowywane w innych serwisach, bez konieczności ujawniania danych logowania aplikacji próbującej uzyskać dostęp do tych zasobów.

Mówimy tu o tzw. dostępie delegowanym. Użytkownicy przyznają aplikacjom trzecim ograniczony dostęp do swoich zasobów, które są przechowywane w innej usłudze, bez konieczności udostępniania im swoich danych logowania.

OAuth 2.0 jest najczęściej stosowaną wersją protokołu OAuth i stanowi kluczowy element autoryzacji oraz uwierzytelniania w sieci.

OAuth znajduje szerokie zastosowanie w autoryzacji aplikacji mobilnych, zabezpieczaniu interfejsów API, umożliwianiu jednokrotnego logowania do wielu aplikacji oraz delegowaniu dostępu stronom trzecim. Pozwala także użytkownikom na zarządzanie i kontrolowanie uprawnień przyznawanych aplikacjom zewnętrznym.

Korzyści z wykorzystania platform OAuth o otwartym kodzie źródłowym

Platformy OAuth o otwartym kodzie źródłowym to implementacje standardu OAuth, których kod jest publicznie dostępny. Aplikacje tworzone są w różnych językach programowania i na różnych platformach. Właśnie dlatego platformy OAuth oferują biblioteki i narzędzia, które ułatwiają programistom włączenie funkcji OAuth do ich aplikacji. Jakie są konkretne korzyści z używania platform OAuth o otwartym kodzie źródłowym?

Jakość i transparentność kodu

Platformy o otwartym kodzie źródłowym dają użytkownikom możliwość wglądu w ich kod. To bardzo korzystne, ponieważ wielu programistów o różnorodnych umiejętnościach i doświadczeniach może analizować kod i zgłaszać potencjalne problemy. To przyczynia się do zapewnienia wysokiej jakości kodu, wolnego od błędów. Przed zdecydowaniem się na korzystanie z danego rozwiązania, firmy mogą przeanalizować kod, aby ocenić, czy spełnia on ich wymagania.

Opłacalność

Oprogramowanie o otwartym kodzie źródłowym jest bezpłatne, co pozwala firmom oszczędzić koszty, które poniosłyby przy wyborze komercyjnych platform OAuth. Nawet firmy z ograniczonym budżetem mogą zadbać o bezpieczeństwo swoich użytkowników.

Unikanie uzależnienia od jednego dostawcy

Korzystając z dostawców OAuth o otwartym kodzie źródłowym, można łatwo zmieniać dostawców, bez potrzeby przeprojektowywania całej architektury aplikacji. Rozwiązania OAuth o otwartym kodzie źródłowym są zgodne z powszechnie akceptowanymi standardami, co zapewnia kompatybilność i interoperacyjność z innymi systemami. Ułatwia to przełączanie się pomiędzy różnymi rozwiązaniami.

Wsparcie społeczności

Rozwiązania o otwartym kodzie źródłowym są często wspierane przez dużą społeczność programistów, którzy pracują nad ich ulepszaniem i udostępnianiem aktualizacji. Dzięki temu oprogramowanie działa z wieloma narzędziami używanymi przez programistów. Problemy z oprogramowaniem można rozwiązywać szybciej, ponieważ zawsze znajdzie się ktoś, kto jest zaznajomiony z danym rozwiązaniem i gotów udzielić pomocy.

Kluczowe kryteria oceny platform Open Source OAuth

Oto kilka czynników, które warto wziąć pod uwagę podczas oceny platformy OAuth o otwartym kodzie źródłowym:

Zabezpieczenia i szyfrowanie

Niezwykle istotne jest, aby rozwiązanie OAuth o otwartym kodzie źródłowym posiadało solidne i niezawodne mechanizmy bezpieczeństwa i szyfrowania. Platformy te przetwarzają wrażliwe dane użytkowników i zasoby, dlatego konieczne jest zapewnienie bezpiecznej komunikacji i mechanizmów ochrony tokenów dostępu.

Łatwość integracji i przyjazne API

Platformy OAuth są integrowane z aplikacjami, dlatego kluczowe jest, aby rozwiązanie OAuth oferowało przejrzyste i intuicyjne API, dokumentację oraz zestawy programistyczne (SDK), które ułatwiają proces integracji. Punkty końcowe platformy powinny być dobrze udokumentowane, z przykładami kodu i bibliotekami dla popularnych języków programowania i frameworków.

Wsparcie społeczności i aktywny rozwój

Silna i aktywna społeczność użytkowników i współtwórców danego rozwiązania o otwartym kodzie źródłowym świadczy o zdrowym ekosystemie wokół tego rozwiązania. W przypadku OAuth oznacza to, że system jest stale ulepszany i wykorzystywany. Aktywna społeczność może dostarczyć przydatnych zasobów i wsparcia, które pomogą zrozumieć i korzystać z rozwiązania OAuth o otwartym kodzie źródłowym.

Skalowalność i wydajność

Aplikacje często mają rosnącą bazę użytkowników. Z tego względu ważne jest, aby używane rozwiązanie OAuth było skalowalne i mogło obsługiwać rosnącą liczbę użytkowników i dużą liczbę jednoczesnych żądań.

Opcje dostosowywania i rozszerzania

Rozwiązanie OAuth powinno być wysoce konfigurowalne, aby dopasować się do różnych wymagań biznesowych i logiki. Firmy nie powinny budować swojej logiki wokół platformy OAuth. Wręcz przeciwnie, platforma OAuth powinna być na tyle konfigurowalna i rozszerzalna, aby wdrożenie nie wymagało zmiany logiki biznesowej. Można to osiągnąć, umożliwiając dodawanie niestandardowych przepływów uwierzytelniania, oświadczeń i atrybutów użytkownika.

Biorąc pod uwagę te kryteria, oto kilka godnych uwagi rozwiązań OAuth o otwartym kodzie źródłowym, które warto wziąć pod uwagę:

SuperTokens

SuperTokens to dostawca rozwiązań do logowania o otwartym kodzie źródłowym, cieszący się uznaniem wśród startupów, takich jak HackeRank, Skoot i Food Market Hub. Korzystają z niego również inżynierowie z firm takich jak Google, Amazon i Meta. SuperTokens oferuje konfigurowalne, rozszerzalne i wymienne komponenty, które ułatwiają integrację uwierzytelniania użytkownika z aplikacją.

Integracja SuperTokens jest prosta i szybka, oferuje też gotowe interfejsy użytkownika dla stron rejestracji i funkcji uwierzytelniania użytkowników. Użytkownicy mają możliwość samodzielnego budowania własnego systemu logowania, korzystając z funkcji pomocniczych dostarczonych z SuperTokens. SuperTokens pozwala na wdrożenie logowania za pomocą hasła e-mail, logowania społecznościowego przez OAuth oraz logowania bez hasła. Możliwe jest również wykorzystanie logowania społecznościowego i hasła e-mail na tym samym ekranie logowania w aplikacji.

Cerbos

Cerbos to niezależna od języka, skalowalna platforma autoryzacyjna o otwartym kodzie źródłowym, która została uznana za najlepszą w kategorii API Security w 2022 roku. Cerbos, czyli warstwa autoryzacyjna do wdrażania ról i uprawnień, współpracuje z różnymi dostawcami tożsamości, w tym między innymi Auth0, Magic, WorkOS, Okta i FusionAuth.

Cerbos umożliwia centralne zarządzanie logiką autoryzacji we wszystkich aplikacjach i wprowadzanie natychmiastowych zmian w sposobie, w jaki aplikacje obsługują autoryzację i uwierzytelnianie. Ponadto Cerbos oferuje kontekstowe definicje ról i atrybutów oraz udostępnia API niezależne od języka, które może być używane z dowolnym stosem technologicznym. Cerbos jest zarówno bezstanowy, jak i hostowany samodzielnie. Może być hostowany na platformach bezserwerowych, w dowolnej chmurze publicznej lub prywatnej, a nawet w prywatnym centrum danych.

Passport

Passport to popularne oprogramowanie pośredniczące do uwierzytelniania dla platformy Node.js, które uwierzytelnia przychodzące żądania w aplikacjach stworzonych z wykorzystaniem Node.js. Uwierzytelnianie odbywa się za pomocą wtyczek, zwanych strategiami. Passport zapewnia programistom możliwość kontrolowania działań, które mają zostać podjęte, gdy uwierzytelnianie zakończy się niepowodzeniem lub sukcesem.

Passport oferuje ponad 500 strategii uwierzytelniania i pozwala na jednokrotne logowanie z OpenID i OAuth. Obsługuje trwałe sesje, dynamiczny zakres i uprawnienia, wdrażanie niestandardowych strategii oraz łatwą obsługę sukcesu i niepowodzenia podczas uwierzytelniania. Ponadto Passport.js nie montuje tras w aplikacjach Node.js i nie zakłada żadnego konkretnego schematu bazy danych, dzięki czemu programista może samodzielnie podejmować wszystkie decyzje na poziomie aplikacji.

Auth.js

Auth.js to rozwiązanie do uwierzytelniania o otwartym kodzie źródłowym, które współpracuje z różnymi frameworkami frontendowymi, w tym między innymi Next.js, SvelteKit i SolidStart. Auth.js zostało zaprojektowane do pracy z różnymi wersjami OAuth. Obsługuje uwierzytelnianie bezstanowe z dowolnym zapleczem, uwierzytelnianie e-mail/bez hasła oraz tokeny JSON Web Token wraz z sesjami bazy danych.

Chociaż Auth.js zostało zaprojektowane z myślą o architekturach bezserwerowych, można je uruchomić w dowolnym miejscu, w tym między innymi AWS Lambda, Docker i Heroku. Auth.js gwarantuje również użytkownikom kontrolę nad swoimi danymi i może działać bez bazy danych. Posiada też wbudowaną obsługę popularnych baz danych, takich jak MySQL, Postgres, MongoDB, SQLite, MariaDB i Microsoft SQL Server. Auth.js wykorzystuje tokeny Cross-site Request Forgery (CSRF) na trasach POST, szyfruje tokeny sieciowe JSON i automatycznie generuje symetryczne klucze podpisywania i szyfrowania dla wygody programisty.

Keycloak

Keycloak to popularne rozwiązanie o otwartym kodzie źródłowym do zarządzania tożsamością i dostępem. Keycloak jest oparty na standardowych protokołach i obsługuje OAuth 2.0, Security Assertion Markup Language (SAML) oraz OpenID Connect. Keycloak jest łatwy do zintegrowania i zawiera funkcje takie jak Single-Sign-On, która umożliwia użytkownikom logowanie się do wielu aplikacji za pomocą jednego logowania do Keycloak.

Jest to również korzystne dla programistów, ponieważ nie muszą oni zajmować się uwierzytelnianiem i przechowywaniem użytkowników oraz tworzeniem formularzy logowania w swoich aplikacjach. Obszar, w którym KeyCloak wyróżnia się na tle konkurencji, to łatwość integracji z aplikacjami. KeyCloak pozwala na łatwe dodanie możliwości logowania do aplikacji za pomocą sieci społecznościowych, bez konieczności zmiany aplikacji lub kodu. Wszystko to odbywa się za pośrednictwem konsoli administracyjnej, w której można skonfigurować dodatkowe funkcje Keycloak, takie jak federacja użytkowników i pośrednictwo tożsamości. Za pomocą konsoli administracyjnej można także tworzyć i zarządzać aplikacjami i usługami oraz dostosowywać zasady autoryzacji.

Apereo CAS

Apereo CAS to rozwiązanie o otwartym kodzie źródłowym do pojedynczego logowania i dostawca tożsamości. CAS obsługuje szeroki zakres protokołów uwierzytelniania, w tym między innymi OAuth 2.0, SAML, OpenID, REST i WS-Federation. CAS ma wbudowaną obsługę zarządzania hasłami, powiadomień, warunków użytkowania i personifikacji.

CAS obsługuje również uwierzytelnianie typu pluggable, uwierzytelnianie delegowane do zewnętrznych dostawców tożsamości, takich jak Facebook, Twitter i OpenID Connect, oraz uwierzytelnianie wieloskładnikowe za pośrednictwem dostawców, takich jak Google Authenticator, Authy, YubiKey, Acceptto i Inwebo. Aby korzystać z CAS, najlepiej używać go z oficjalnie obsługiwanymi platformami klienckimi, takimi jak Java, .NET, Apache i PHP.

Ory Kratos

Ory Kratos to rozbudowany i bogaty w funkcje system zarządzania użytkownikami, który działa w chmurze. Mimo że Ory Kratos jest napisany w Go, zawiera zestawy SDK dla każdego języka programowania, a także konfigurowalne logowanie, rejestrację i zarządzanie profilami. Ory Kratos może współpracować z dowolnym frameworkiem interfejsu użytkownika i wymaga minimalnej ilości kodu do konfiguracji.

Ory Kratos oferuje między innymi uwierzytelnianie wieloskładnikowe u różnych dostawców, samoobsługowe logowanie i rejestrację, logowanie do sieci społecznościowych, weryfikację i odzyskiwanie konta oraz zarządzanie użytkownikami. Zarządzanie użytkownikami umożliwia tworzenie, aktualizowanie i usuwanie tożsamości oraz ich danych w bazie użytkowników. Ory Kratos pozwala na korzystanie z konfigurowalnych modeli tożsamości, w których można tworzyć własne interfejsy i definiować niestandardowe pola, takie jak imiona, adresy czy ulubione zwierzątko.

Logto

Zgodnie z dokumentacją, Logto jest opłacalną alternatywą typu open source dla Auth0, które jest zastrzeżonym rozwiązaniem do uwierzytelniania i autoryzacji. Logto oferuje wszystkie funkcje potrzebne do bezpiecznego uwierzytelniania i autoryzacji, w bardziej przystępnych cenach. Logto jest dostarczane z gotowym do użycia interfejsem API do zarządzania, które może być używane jako dostawca uwierzytelniania. Posiada również SDK, które pozwalają na łatwą i szybką integrację Logto z dowolną tworzoną aplikacją.

OpenID Connect Connect (OIDC), który rozszerza protokół autoryzacji OAuth 2.0, jest używany do uwierzytelniania, podczas gdy kontrola dostępu oparta na rolach (RBAC) jest używana do autoryzacji. Dzięki LogTo aplikacje mogą implementować logowanie społecznościowe i logowanie bez hasła oraz obsługiwać użytkowników, którzy zapomnieli swoich danych logowania. LogTo oferuje gotowe komponenty interfejsu użytkownika z możliwością dostosowania CSS, co ułatwia i przyspiesza programowanie. Użytkownicy uzyskują również dostęp do platformy w chmurze, gdzie mogą dostosowywać, integrować i przeglądać uwierzytelnianie, które wdrażają w swojej aplikacji.

Podsumowanie

W kontekście implementacji uwierzytelniania i autoryzacji w aplikacjach, dostępnych jest wiele rozwiązań o otwartym kodzie źródłowym, które pozwalają firmom zaoszczędzić pieniądze. Rozważ któreś z opisanych rozwiązań, aby zadbać o bezpieczeństwo swojej firmy i wrażliwych danych użytkowników.

Zachęcamy również do zapoznania się z informacjami o najlepszych platformach uwierzytelniania użytkowników.