SAML kontra OIDC
SAML i OIDC to dwa najpopularniejsze protokoły uwierzytelnienia stosowane w przemyśle SSO. Ten artykuł porówna SAML i OIDC pod względem ich architektury oraz zastosowań.
Co to jest SAML?
SAML (Security Assertion Markup Language) jest opartym na XML otwartym standardem wymiany danych uwierzytelniania i autoryzacji między różnymi stronami, w szczególności między dostawcą tożsamości (IdP) a dostawcą usług (SP). Umożliwia web-based SSO (Single Sign-On), pozwalając użytkownikom autoryzować się raz, aby uzyskać dostęp do wielu aplikacji. SAML to dojrzały protokół, który istnieje od dłuższego czasu i jest powszechnie przyjęty przez przedsiębiorstwa. Niektóre z najpopularniejszych platform SaaS, takich jak Salesforce, Workday i Microsoft Azure AD, obsługują SAML SSO.
Komponenty SAML
- Dostawca tożsamości (IdP): Podmiot, który uwierzytelnia użytkowników i dostarcza informacje o tożsamości dostawcom usług.
- Dostawca usług (SP): Podmiot, który dostarcza usługi użytkownikom i polega na dostawcy tożsamości do uwierzytelnienia użytkowników.
- Asercje SAML: Dokumenty w formacie XML, które przenoszą dane uwierzytelniania i autoryzacji użytkownika. Zawierają oświadczenia uwierzytelniające, oświadczenia atrybutów i oświadczenia decyzji autoryzacyjnych.
- Protokół SAML: Definiuje format wiadomości i zasady wymiany asercji SAML między IdP a SP.
- Więzi SAML: Definiują sposób transportu wiadomości SAML przez różne protokoły komunikacyjne, takie jak HTTP POST, HTTP Redirect itp.
- Metadane SAML: Dokumenty w formacie XML zawierające informacje konfiguracyjne IdP i SP. Zawierają klucz publiczny, punkty końcowe i obsługiwane więzi, które są używane do ustanowienia zaufania między IdP a SP.
- Punkt końcowy jednokrotnego logowania: Punkt końcowy, do którego SP przekierowuje użytkownika w celu uwierzytelnienia z IdP.
- URL usługi konsumenta asercji (ACS): Punkt końcowy, do którego IdP wysyła asercję SAML po pomyślnym uwierzytelnieniu.
Jak działa SAML?
- SP inicjuje przepływ SSO:
- IdP inicjuje przepływ SSO:
Zalety SAML
- Dojrzały i szeroko przyjęty: SAML to dojrzały protokół, który istnieje od dłuższego czasu i jest powszechnie przyjęty przez przedsiębiorstwa.
- Znormalizowany: SAML to otwarty standard utrzymywany przez OASIS, zapewniający interoperacyjność między różnymi dostawcami.
- SSO: SAML umożliwia web-based SSO, pozwalając użytkownikom autoryzować się raz, aby uzyskać dostęp do wielu aplikacji.
- Scentralizowane zarządzanie użytkownikami: SAML pozwala organizacjom centralnie zarządzać tożsamościami użytkowników i konsekwentnie egzekwować polityki bezpieczeństwa.
Wyzwania SAML
- Złożoność: SAML to złożony protokół wymagający głębokiego zrozumienia XML i koncepcji bezpieczeństwa.
- Wydajność: Wiadomości SAML są oparte na XML i mogą być duże. Dostarczanie i parsowanie XML może być wolniejsze w porównaniu do formatów tokenów, takich jak JSON Web Token (JWT).
- Przestarzały standard: SAML to starszy standard w porównaniu do OIDC i jest uważany za mniej bezpieczny.
- Związek z dostawcą: SAML jest protokołem specyficznym dla dostawcy, a zmiana dostawców może być wyzwaniem.
Co to jest OIDC?
OIDC (OpenID Connect) to warstwa tożsamości zbudowana na protokole OAuth 2.0. Podobnie jak SAML, OIDC służy również do wymiany danych uwierzytelniania i autoryzacji między IdP a SP.
W porównaniu do SAML, OIDC jest nowocześniejszym i lżejszym protokołem, który zdobywa popularność w nowoczesnych aplikacjach webowych i mobilnych. OIDC wykorzystuje JWT do przesyłania informacji o tożsamości, które są bardziej zwarte i łatwiejsze do obsługi w porównaniu do opartych na XML asercji SAML. Jest szczególnie popularny w aplikacjach skierowanych do konsumentów i zabezpieczeniu API.
Komponenty OIDC
- Dostawca tożsamości (IdP): Podmiot, który uwierzytelnia użytkowników i dostarcza informacje o tożsamości dostawcom usług.
- Podmiot polegający (RP): Podmiot, który dostarcza usługi użytkownikom i polega na dostawcy tożsamości do uwierzytelnienia użytkowników. Np. aplikacje webowe, aplikacje mobilne lub API.
- Tokeny OIDC: Tokeny, które przenoszą informacje o tożsamości użytkownika.
- Token ID: Token w formacie JWT zawierający informacje o tożsamości użytkownika.
- Token dostępu: Token w formacie JWT lub nieprzezroczystym zapewniający dostęp do chronionych zasobów.
- Token odświeżający: Token używany do uzyskania nowego tokenu dostępu bez konieczności ponownego uwierzytelnienia użytkownika. Daje offline długoterminową autoryzację dla RP.
- Punkty końcowe OIDC: Punkty końcowe używane do uwierzytelniania i wymiany tokenów. Niektóre najważniejsze punkty końcowe to:
- Punkt końcowy do odkrywania: Gdzie RP może pobrać publiczne informacje konfiguracyjne OIDC z IdP.
- Punkt końcowy autoryzacji: Gdzie RP wysyła żądanie uwierzytelniające.
- Punkt końcowy tokenu: Gdzie RP żąda tokenów od serwera autoryzacji.
- Punkt końcowy informacji o użytkowniku: Gdzie RP może pobrać informacje o profilu użytkownika.
- Zakresy: OIDC definiuje zestaw standardowych zakresów, które określają prawa dostępu przyznane RP. Takie jak
openid
,profile
,email
,address
itp.
Jak działa OIDC?
OIDC zapewnia wiele przepływów, które są wyraźnie zaprojektowane do różnych przypadków użycia. Oto dwa najczęstsze przepływy OIDC:
- Przepływ kodu autoryzacyjnego:
Przepływ kodu autoryzacyjnego jest najczęściej używanym przepływem w OIDC dla aplikacji skierowanych do konsumentów.
- Przepływ poświadczeń klienta:
Przepływ poświadczeń klienta można użyć do uwierzytelnienia typu machine-to-machine, nie powiązanego z użytkownikiem.
Zalety OIDC
- Nowoczesny i lekki: OIDC to współczesny protokół, który wykorzystuje tokeny JWT oparte na JSON, które są bardziej zwarte i łatwiejsze do obsługi w porównaniu do opartych na XML asercji SAML.
- Aplikacje skierowane do konsumentów: OIDC jest szczególnie popularny w aplikacjach skierowanych do konsumentów i zabezpieczeniu API.
- Interoperacyjność: Zbudowany na podstawie OAuth 2.0, OIDC jest kompatybilny z różnymi platformami, urządzeniami i środowiskami.
- Bezpieczeństwo: OIDC oferuje bardziej bezpieczną metodę uwierzytelnienia użytkownika i ochrony API. Wdraża różne nowoczesne funkcje bezpieczeństwa, takie jak introspekcja tokenu, unieważnienie tokenu, Proof Key for Code Exchange (PKCE) i obsługuje różne przepływy uwierzytelnienia dostosowane do różnych potrzeb bezpieczeństwa.
- Łatwość użycia: OIDC jest prostszy do wdrożenia i pracy w porównaniu do SAML. Jest bardziej przyjazny dla programistów i posiada kompleksowe biblioteki i zestawy SDK dla wielu języków programowania i platform.
Wyzwania OIDC
- Zarządzanie tokenami: OIDC opiera się na tokenach do uwierzytelnienia i autoryzacji. Wymaga odpowiednich praktyk zarządzania tokenami w celu zapewnienia bezpieczeństwa.
- Złożoność: Mimo że OIDC jest prosty dla podstawowych konfiguracji, ze względu na elastyczność może dodać złożoności podczas wdrażania zaawansowanych dostosowań. Np. niestandardowych roszczeń czy Kontroli dostępu opartej na rolach (RBAC).
- Adopcja: OIDC jest nadal stosunkowo nowy w porównaniu do SAML, zwłaszcza w przestrzeni korporacyjnej. Niektóre systemy starsze mogą nadal polegać na SAML do celów SSO.
Porównanie SAML vs OIDC
Aspekt | SAML | OIDC |
---|---|---|
Format tokenu | Oparte na XML asercje SAML | Oparte na JSON tokeny JWT |
Główne zastosowanie | SSO w przedsiębiorstwach, integracje B2B | Aplikacje skierowane do konsumentów, bezpieczeństwo API |
Łatwość użycia | Złożony, wymaga głębokiego zrozumienia XML | Prosty, oparty na JSON, łatwy do wdrożenia |
Adopcja | Szeroko przyjęty przez przedsiębiorstwa | Coraz bardziej popularny dla nowoczesnych aplikacji |
Bezpieczeństwo | Dojrzały, ale uważany za mniej bezpieczny | Nowoczesny i bardziej bezpieczny |
Elastyczność | Ograniczona, zaprojektowana dla przypadków użycia SSO | Elastyczna, obsługuje różne przypadki użycia |
Przyszłość SAML i OIDC
Zarówno SAML, jak i OIDC są szeroko wykorzystywane do celów uwierzytelniania i autoryzacji.
SAML pozostaje filarem dla SSO w przedsiębiorstwach i integracji B2B. Jego solidne wsparcie dla zarządzania tożsamością federacyjną i udokumentowana historia gwarantują jego dalszą istotność, szczególnie dla starszych systemów i dużych organizacji.
OIDC natomiast nadal ewoluuje, napędzany zapotrzebowaniem na bezpieczne i skalowalne uwierzytelnianie w nowoczesnych aplikacjach. Jego lekka natura i zgodność z API i mikrousługami czynią go filarem dla architektur cloud-native i rozproszonych. Wraz z rosnącą popularnością uwierzytelniania bezhasłowego, biometrii i uwierzytelniania wieloskładnikowego (MFA), oczekuje się, że OIDC będzie się płynnie integrować z nowymi technologiami, gwarantując jego znaczenie w przyszłych latach.