Jakie są różnice między SAML a OIDC?
W tym artykule przedstawiamy przegląd protokołów SAML i OIDC oraz ich typowe przepływy uwierzytelniania. Porównujemy ich kluczowe różnice, zalety i wady każdego z nich. Dodatkowo, na podstawie potencjalnych scenariuszy użytkowników, oferujemy wskazówki, jak wybrać między tymi dwoma protokołami.
OpenID Connect (OIDC) i Security Assertion Markup Language (SAML) to protokoły uwierzytelniania, które umożliwiają dostawcom tożsamości (IdP) wdrażanie uwierzytelniania użytkowników i kontrolę dostępu. Każdy z protokołów definiuje swój mechanizm utrzymywania tożsamości uwierzytelnionych użytkowników, co następnie jest wykorzystywane do przyznawania lub odmowy dostępu do chronionych aplikacji.
Czym są SAML i OIDC?
IdP przechowują bazy danych informacji o tożsamości użytkowników. Dostawcy usług (SP) polegają na tych informacjach, aby uwierzytelniać użytkowników, czasem umożliwiając wykorzystanie pojedynczego uwierzytelnienia w wielu aplikacjach (single sign-on). OIDC i SAML to standardy, które definiują, jak te informacje związane z tożsamością użytkowników przepływają między tymi dwiema stronami. Ich ostateczny cel jest taki sam: uwierzytelnianie użytkownika. Jednakże podstawowe podejścia, jakie podejmują w celu osiągnięcia tego celu, różnią się.
SAML
SAML 2.0, od 2005 roku, to obecna wersja standardu. Używa XML do formatowania informacji o tożsamości, żądań i odpowiedzi. XML to dojrzały standard do formatowania dokumentów w sposób zrozumiały zarówno dla ludzi, jak i komputerów. Aby przesyłać lub odbierać informacje zakodowane w XML, wykorzystuje podstawowe żądania SOAP lub HTTP. Zdefiniowany przez protokół SAML, serwis żądający informacji o tożsamości to Dostawca Usług (SP).
Zanim wprowadzimy typowy proces uwierzytelniania SAML, musimy zrozumieć elementy, na których opiera się uwierzytelnianie SAML. Zanim IdP i SP mogą się wzajemnie rozpoznać i zakończyć proces uwierzytelniania, muszą "wymienić" niezbędne informacje, co zwykle odbywa się poprzez metadane sformatowane w XML. Wymieniane informacje obejmują:
- Klucze publiczne, gdzie IdP i SP generują własne pary kluczy prywatnych i publicznych oraz wymieniają je w celu podpisywania lub szyfrowania komunikacji. Wraz z postępem w zakresie bezpieczeństwa komunikacji sieciowej większość scenariuszy wymaga teraz jedynie podpisywania żądań, pomijając krok szyfrowania.
- Punkty końcowe, używane do wysyłania żądań uwierzytelnienia SAML z SP do IdP oraz do otrzymywania przez SP asercji SAML w odpowiedzi na żądania uwierzytelnienia z IdP.
- Obsługiwane formaty atrybutów XML, używane przez IdP do przesyłania wymaganych informacji o użytkowniku do SP po zakończeniu uwierzytelnienia.
Gdy IdP i SP są świadome wspomnianych informacji, mogą przystąpić do procesu autoryzacji (typowy przepływ uwierzytelniania inicjowany przez SP):
OIDC
OIDC to współczesny protokół, który wzbogaca ramy OAuth 2.0. Wykorzystuje JSON-based Web Tokens (JWT) do konstruowania ładunków danych. JWT, ustalone normy branżowe, ustalają wytyczne dotyczące bezpiecznej wymiany i reprezentacji oświadczeń między podmiotami. Te oświadczenia, w istocie zaszyfrowane dane użytkownika, są kluczowe dla weryfikacji i zarządzania tożsamością. OIDC głównie wykorzystuje wszechobecne HTTPS do przesyłania danych.
Jak powszechnie wiadomo, protokół OIDC obsługuje różnorodne przepływy, w tym przepływ kodu autoryzacyjnego, przepływ implicytny i przepływ hybrydowy. W poniższym przykładzie przejdziemy przez najbezpieczniejszy i typowy z nich: przepływ kodu autoryzacyjnego. Jest to również przepływ wykorzystywany przez Logto.
Wyróżniające cechy OIDC i SAML
- Ze względu na swoje nowsze opracowanie, OIDC lepiej nadaje się do uwierzytelniania w nowoczesnych aplikacjach niż starszy standard SAML.
- Historycznie, SAML wyprzedza OIDC i został zintegrowany z wieloma istniejącymi systemami korporacyjnymi.
- W przeciwieństwie do bardziej rozbudowanych dokumentów XML w SAML, JWT w OIDC są kompaktowe i bardziej przyjazne użytkownikowi w przetwarzaniu.
- Konfiguracja OIDC jest zazwyczaj prostsza niż SAML.
- Kluczową cechą OIDC jest jego definicja „zakresów”, umożliwiająca IdP zarządzanie różnorodnymi uprawnieniami. Aplikacje mogą żądać określonych uprawnień od IdP, które są przyznawane po zatwierdzeniu przez użytkownika. Ta cecha OIDC oferuje IdP szczegółową kontrolę nad uprawnieniami.
Jak wybrać między OIDC a SAML?
Zarówno OIDC, jak i SAML to solidne systemy uwierzytelniania, każdy z nimi ma swoje unikalne mocne strony. Wybór zależy od konkretnych wymagań Twojej organizacji.
- Dla szybkiego i wydajnego wdrożenia platformy tożsamości, OIDC jest preferowany w stosunku do SAML. Implementacja OIDC jest prostsza, unikając złożonej obsługi XML, której wymaga SAML do analizy metadanych, przetwarzania żądań uwierzytelniania i analizy asercji SAML.
- OIDC jest idealny dla środowisk z rozległymi interakcjami API i zaawansowanymi mechanizmami uprawnień, oferując bardziej elastyczną i wydajną kontrolę nad uprawnieniami oraz lepsze doświadczenie dla deweloperów.
- Przy integracji z istniejącymi systemami opartymi na SAML, wybór SAML zapewnia płynniejszą interoperacyjność systemów i zmniejsza wysiłek potrzebny do łączenia różnych protokołów.
Czy dostępne są dobre rozwiązania rynkowe?
Logto, popularne rozwiązanie tożsamości dla deweloperów, niedawno wprowadziło funkcjonalność Enterprise SSO. Oferuje wsparcie dla protokołów SAML i OIDC, razem z gotowymi integracjami dla głównych dostawców tożsamości, takich jak Google Workspace i Microsoft Entra ID (dawniej Azure AD). Dzięki Logto możesz ominąć złożoności implementacji SSO na własną rękę. Kilka prostych kroków konfiguracyjnych umożliwia wsparcie SSO w systemie tożsamości, pozwalając na wybór odpowiedniego protokołu, aby spełnić potrzeby biznesowe.