czyli prosty sposób na SSO CAS (Central Authentication Service) czyli prosty sposób na SSO Marcin Frankiewicz Projektant, APUS 10.01.2013, Kraków
Agenda Czym jest CAS - parę słów o Single Sign-On Bilety, usługi ... czyli architektura Modułowość, rozszerzalność, konfiguracja Integracja z CAS-em Konkurencyjne rozwiązania A jak to wszystko działa w praktyce … Pomoc, źródła, materiały
Parę słów o Single Sign-On Czym jest CAS Parę słów o Single Sign-On
Wiele niepowiązanych witryn, każda wymaga założenia konta, do każdej inny login i hasło.
Wiele witryn, każda własny login i hasło. Według badania* 31% uczestników badania używa jednego lub dwóch haseł do wszystkich serwisów. Wykradzenie jednego hasła daje dostęp włamywaczom do wszystkich danych użytkownika zgromadzonych w „chmurze”. *http://www.kaspersky.com/downloads/pdf/kaspersky-lab_ok-consumer-survey-report_eng_final.pdf
Zamieniamy na jeden punkt autoryzacji – jeden login i hasło Za pomocą wspólnego repozytorium np. LDAP, problem nadal pozostaje, kompromitacja któregokolwiek z systemów powoduje kompromitację całej infrastruktury – dostęp do dowolnego elementu. Za pomocą serwera SSO – JEDNA formatka logowania !!
SSO Single Sign On
Single Sign On Proces uwierzytelnienia, pozwalający na jednokrotne wprowadzenie danych uwierzytelniających (np. login i hasło ), a następnie na dostęp do usług bez ich ponownego wprowadzania
Single Sign On Komfort Bezpieczeństwo Tylko jeden login/hasło (lub inne dane uwierzytelniające) Autoryzacja tylko raz, a potem dostęp do wielu aplikacji (Single Sign-In) Bezpieczeństwo Aplikacje nie „dotykają” hasła użytkownika Dane logowania użytkownika bezpieczne nawet przy kompromitacji aplikacji usługi Single Sign In http://en.wikipedia.org/wiki/List_of_single_sign-on_implementations
CAS (Central Authentication Service) Proste, elastyczne, rozszerzalne, otwarte SSO
JA-SIG CAS CAS - Central Authentication Service Scentralizowane, wieloprotokołowe WebSSO (Single Sign-On, Single Sign-In, Single Sign-Out) Początki w Yale University, obecnie JA-SIG Serwer CAS oraz klienci CAS Wsparcie dla wielu mechanizmów autoryzacji Delegowanie autoryzacji (proxy) Dobrze udokumentowane API, protokół oraz wsparcie Darmowy i otwarty JASIG - Java Architectures Special Interest Group Wieloprotokołowe - komunikacja za pomocą jednego lub kilku protokołów WebSSO – SSO dla aplikacji WEB owych Single Sign-On – jedno hasło Single Sign-In – jednokrotne logowanie Single Sign-Out – jednokrotne wylogowanie Serwer CAS – autoryzuje klientów Scentralizowane – wszystkie hasła przechowywane w jednym miejscu (nie koniecznie jeden mechanizm autoryzacji)
Bilety, usługi ... czyli architektura
Podstawowe pojęcia dla CAS Serwer CAS Usługa – aplikacja WWW autoryzująca użytkowników za pomocą serwera CAS Proxy – usługa chcąca uzyskać dostęp do innych usług w imieniu danego użytkownika Usługa końcowa – usługa akceptująca dane uwierzytelniające od proxy Bilet – unikalny identyfikator służący do autoryzacji usług i jej weryfikacji
Architektura CAS Jak to działa?
www.prezentacja-cas.pl Użytkownik odwołuje się do zasobu w aplikacji WEB.
strona logowania logowanie.prezentacja-cas.pl redirect service=www.prezentacja-cas.pl Gdy zasób jest chroniony - redirect do serwera CAS CAS sprawdza czy istnieje TGT (Ticket Granting Ticket), jeśli istnieje zamiast strony logowania następuje pominięcie kroku i redirect do usługi (tak jak to zostanie pokazane w następnym kroku). Wyświetlenie strony logowania. www.prezentacja-cas.pl
ZALOGUJ logowanie.prezentacja-cas.pl www.prezentacja-cas.pl marcin.frankiewicz ************ Uwierzytelnianie (authentication). Jeżeli dane niepoprawne – komunikat. Dla danych poprawnych … www.prezentacja-cas.pl
logowanie.prezentacja-cas.pl redirect Redirect do usługi z ST (Service Ticket-em) jako parametr. Passing the "master key" session identifier exclusively between the user's browser and CAS server dramatically limits the potential for man-in-the-middle attacks on the session identifier. CAS benefits from increased security in this regard over shared cookie strategies. www.prezentacja-cas.pl www.prezentacja-cas.pl?ticket=xxx
Witaj marcin.frankiewicz! logowanie.prezentacja-cas.pl Witaj marcin.frankiewicz! weryfikacja ID TAK | NIE XML Weryfikacja ST przez usługę (do CAS przekazany ST i nazwa usługi). Czas życia ST bardzo krótki i powiązany z usługą, zapobiega to atakowi man in the middle. Odpowiedź za CAS w postaci XML-a. Identyfikator użytkownika + atrybuty. www.prezentacja-cas.pl
Architektura CAS Tryb gateway
Często spotykana sytuacja, zwłaszcza w portalach internetowych, że zasób jest publiczny a wyświetlana jest informacja o zalogowanym użytkowniku. Mechanizmy typu „pamiętaj mnie”. Domyślnie dla każdego zasobu chronionego następuje przekierowanie do CAS i prezentacja strony logowanie (dla niezalogowanego). Aby to osiągnąć w CAS wprowadzono tryb gateway. W trybie gateway strona logowania nie jest NIGDY pokazywana.
Protokół CAS – tryb gateway Rozpoznanie czy użytkownik jest zalogowany bez pokazywania strony logowania Przydatny dla zasobów niechronionych Dla niezalogowanych użytkowników dużo przekierowań Brak wsparcia w kliencie Spring Security Każde żądanie przekierowywane na stronę logowania CAS a potem z powrotem do usługi
Bilety Architektura CAS Służą do autoryzacji usług i jej weryfikacji. Unikalne stringi z odpowiednim przedrostkiem i identyfikatorem.
Bilety TGT (Ticket Granting Ticket) bezpieczny identyfikator sesji SSO, udostępniany wyłącznie serwerowi CAS w postaci cookie ST (Service Ticket) dane uwierzytelniające możliwe do wykorzystania tylko raz wykorzystywane aby uzyskać dostęp do usług Proxy-granting ticket (PGT) Proxy-granting ticket IOU (PGTIOU) Proxy ticket (PT) TGT Private and protected cookie (the only one used by CAS, optional) Opaque re-playable ticket ST Browser’s passport to the CAS client (application) Opaque and non re-playable ticket Very limited validity (a few seconds) PGT Application’s passport for a user to the CAS server Opaque and re-playable ticket PT Application’s passport for a user to a tier service Very limited validity
Modułowość, rozszerzalność, konfiguracja Budowa serwera CAS
Zastosowane technologie Java 1.5 + Java Servlet 2.4 Apache Maven Spring WebFlow Możliwość wdrożenia na wielu serwerach - każdy serwer wspierający Servlet 2.4 – pojedyncze archiwum WAR Spring Framework – API CAS podobne do Spring Framework, rozszerzalne i modułowe, konfiguracja w XML Spring-a Spring Security – Zarządzanie usługami i statusem serwera Spring WebFlow – Logowanie jako Web Flow (workflow), łatwe do rozszerzenia np. wymuszenie zmiany hasła Spring Framework Spring Security
Konfiguracja serwera Maven WAR „overlay” Spring Beans XML deployerConfigContext.xml + cas.properties CSS, grafika, widok, itp. Nowe moduły w postaci zależności Maven Najprościej za pomocą mechanizmu maven war overlay, ale można też przepakować WAR-kę lub zbudować ze źródeł.
Protokoły komunikacji CAS 1.0 i 2.0 SAML 1.1 SAML2 OpenID OAuth Własny protokół Komunikacja pomiędzy klientem a serwerem Klient może komunikować się z serwerem za pomocą któregokolwiek ze wspieranych protokołów. Wszystkie wspierane protokoły są konceptualnie podobne do siebie, jednak różniące je cechy lub właściwości mogą być pożądane przez jedną lub drugą aplikację. Np. protokół CAS wspiera autoryzację proxy a protokół SAML wspiera przekazywanie atrybutów oraz Single Sign Out. SAML 1.1 – wsparcie częściowe, głownie ze względu na przekazywanie atrybutów oraz Single Sign Out. SAML 2 – integracja z kontem Google, idP (identity provider) dla Google Apps (hosted) OpenID - wsparcie częściowe dla funkcjonalności idP (identity provider) OAuth – jako klient OAuth (Facebook, Twitter, Google) lub jako serwer OAuth 2.0
Dostawcy autoryzacji Podstawowy Active Directory LDAP JDBC JAAS RADIUS SPNEGO Certyfikat X.509 Własny dostawca Podstawowy – użytkownik/hasło w konfiguracji serwera lub w pliku JDBC – query (SQL) do BD w pliku konfiguracji JAAS - Java Authentication and Authorization Service – framework podobny do PAM RADIUS - Remote Authentication Dial In User Service - usługa zdalnego uwierzytelniania użytkowników, którzy wdzwaniają się do systemu. Obecnie jest najpopularniejszym protokołem uwierzytelniania i autoryzowania użytkowników sieci telefonicznych i tunelowych. Używany również w sieciach bezprzewodowych. SPNEGO - Simple and Protected GSSAPI Negotiation Mechanism – Kerberos X.509 – certyfikat klienta
Dodatkowe funkcjonalności i rozszerzenia Menedżer usług i udostępnianie atrybutów RestAPI „Zapamiętywanie” użytkownika Blokada przed zgadywaniem hasła Audyt i statystyki Możliwość pracy w klastrze ClearPass Nieoficjalne, np. CASShib Menedżer usług – osobny moduł pozwalający na zarządzanie usługami – white-list, udostępniane atrybuty, proxy RestAPI – żądanie TGT, ST, logout „Remember me” – długoterminowe TGT Blokada przed zgadywaniem hasła – nie blokuje konta a jedynie dostęp z określonego IP Audyt i statystyki – Inspektr do audytowania, zapis w BD Klaster – unikalność biletów – rejestr biletów, distributable ClearPass – przekazywanie „czystego” hasła do usługi CASShib - CAS zamiast Shibboleth service provider
Integracja z CAS-em Klienci CAS Czyli jak zintegrować aplikację z CAS-em
Integracja klientów z CAS Oficjalni klienci utrzymywani przez JA-SIG Klienci nieoficjalni - community Aplikacje z wbudowaną integracją z CAS Pojęcie „CASifying” https://wiki.jasig.org/display/CAS/CASifying+Applications https://wiki.jasig.org/display/CASC/CASifying+Applications CASifying – czyli co zrobić aby aplikacja wykorzystywała CAS jako dostawcę uwierzytelniania.
Oficjalni klienci CAS Java CAS Client phpCAS mod_auth_cas Spring Security CAS Apache Shiro CAS phpCAS mod_auth_cas .NET CAS Client
Klient Java – zestaw filtrów, autoryzują i weryfikują, oraz umieszczają Principal-a w request
Klienci nieoficjalni Perl Ruby Python PAM IIS PL/SQL Drupal, JIRA, Confluence https://wiki.jasig.org/display/CASC/Unofficial+CAS+Clients
Aplikacje zintegrowane z CAS uPortal – portal JA-SIG Mantis – Bug Tracker Liferay Portal – portal Moodle – system e-learningowy
Comarch Portal Overlay, overlay-a Autoryzacja JDBC, Active Directory, ePAUP (jednocześnie) Przekazywanie atrybutów Klient Spring Security + moduły dodatkowe z klientami Java Modyfikacja formatki logowania Klaster (Jboss Cache) Wymuszenie zmiany hasła
Konkurencyjne rozwiązania
Rozwiązania online OpenID OAuth Mozilla Persona ePUAP Facebook Google Twitter Microsoft Wiele innych http://en.wikipedia.org/wiki/Oauth Mozilla Persona ePUAP
Serwery SSO JOSSO OpenAM Shibboleth (Internet2) CoSign
DEMO A jak to wszystko działa w praktyce … 30 minut pracy – overlay CAS-a, prosty klient, konfiguracja Tomcat-a Scenariusz: https://github.com/fraanek-pl/cas-presentation
Pomoc, źródła, materiały Community … Pomoc, źródła, materiały
Pomoc, źródła, materiały http://www.jasig.org/cas http://www.ja-sig.org/wiki/display/CAS/Home http://www.jasig.org/cas/cas2-architecture http://www.jasig.org/cas/protocol https://github.com/Jasig/cas
Dziękuję za uwagę Pytania, uwagi Marcin Frankiewicz Marcin.Frankiewicz@comarch.pl