Proste SSO - korzystanie z uwierzytelniania niestandardowego-CAS lub jakiÅ› serwer OAuth lub openid?

Chciałbym dowiedzieć się więcej o różne sposoby rozwiązywania pojedynczych Logowanie i ich wady i zalety. Czy pracowałeś z jednym konkretnym rozwiązaniem, powiedz mi, co jest w nim dobre i powiedz, jakie są ograniczenia lub nieoptymalne części.

Poniżej czy szczegóły tego, co chciałbym wiem, albo nie rozumiem.

SSO jest ogromnym tematem, jak wymienione w Wikipedii . Im więcej się uczę, tym więcej mam pytań.

Po pierwsze, nie zrozumieć potrzebę weryfikacji tokenów CAS , do czego to służy?

jest bezpieczniejsze? myślę, że jest podatny na atak man-in-the-middle, jak każdy inny. Czy klienci powinni również korzystać z protokołu ssl?

Bądźmy prawdziwi, to jest nasza potrzeba: Automatyczne rozpoznawanie / logowanie użytkownika, jeśli jest już zalogowany w jednej z naszych aplikacji.

  • my-php-app.com
  • my-java-app.com
  • my-ruby-app.com

(mamy wiele webapps, napisane w różnych językach)

Chcemy (zachować) nasze własne zasady uwierzytelniania i użytkownicy przechowują, ale może dodać jakiegoś dostawcę OAuth2, jak facebook-connect. Chcemy, aby był martwy prosty dla użytkowników i prosty dla programistów korzystających z niego.

Co byś zrobił?
    CAS? Openid? Czy Mogę mieć z nim scentralizowane uwierzytelnianie?
  • Inne? Czy serwer z OAuth?

Po stronie klienta, czy użyłbyś ramki iframe, takiej jak lightbox, aby pokazać przekierowane page? Dlaczego/dlaczego nie?


Jeszcze jedno pytanie związane z SSO: Saml jest często (błędnie?) zmieszane z dyskusjami SSO - czy rozumiem, jeśli powiem, że

Implementacja saml nie zapewni sso (autologin) przy wskazywaniu przeglÄ…darka do www.yetanother-myapp.com?


Kilka powiązanych pytań, które studiowałem:

Dzięki za edukowanie mnie!

Author: Community, 2011-05-14

3 answers

Oauth jest przeznaczony do uwierzytelniania aplikacji, aby umożliwić im działanie w imieniu użytkownika. Na przykład klient Twittera może publikować tweety na koncie użytkownika. Może być używany do pojedynczego logowania jako Facebook pokazuje, ale wymaga to trochę dodatkowej pracy.

Porównanie CAS i OpenID

CAS jest scentralizowanym systemem z jednym organem rachunkowym. OpenID jest rozproszonym systemem , w którym w zasadzie każdy może skonfigurować dostawcę tożsamości. Oczywiście można ograniczyć Twój konsument akceptuje tylko swojego dostawcę tożsamości.

OpenID ma dwa (niekompatybilne) standardy, które zapewniają dodatkowe atrybuty dotyczące konta, które są obsługiwane mniej więcej przez wspólne biblioteki. W standardowej konfiguracji CAS podaje tylko nazwę użytkownika. Chociaż CAS teoretycznie obsługuje wymianę atrybutów, w tej chwili obsługuje ją tylko klient PHP.

Zarówno OpenID, jak i CAS mogą wykonać Automatyczne logowanie . Jeśli użytkownik jest już zalogowany, przeglądarka zostanie natychmiast przekierowana z powrotem do aplikacji. W prostej konfiguracji dostawca tożsamości wyświetli jednak stronę logowania, jeśli użytkownik nie jest zalogowany. Więc jeśli chcesz zezwolić na anonimowy dostęp do swojej strony, będzie to wymagało od ludzi kliknięcia dedykowanego łącza logowania.

Na szczęście zarówno OpenID, jak i CAS umożliwiają transparentną próbę logowania . W tym trybie formularz logowania nie jest wyświetlany. Przeglądarka jest natychmiast przekierowywana z powrotem z informacjami uwierzytelniającymi lub bez nich. Innymi słowy: możesz przekierować wszystkich nowych użytkowników (bez sesji) do dostawcy tożsamości, gdy tylko odwiedzą Twoją witrynę. Istnieje ładny diagram wyjaśniający to szczegółowo. CAS nazywa go "trybem bramy" i uzyskuje się go przez dodanie gateway = true do adresu URL logowania. W OpenID OpenID nazywa się "tryb natychmiastowy", a parametr URL to openid.mode=checkid_immediate

CAS obsługuje pojedyncze wylogowanie. OpenID nie.

Moje osobiste doświadczenie jest takie, że CAS jest bardzo łatwy w konfiguracji i bardzo niezawodny dzięki wysokiej jakości bibliotekom dla wszystkich popularnych języków programowania. OpenID ma wiele drobnych niezgodności, ponieważ jest o wiele bardziej złożonym systemem. OpenID pozwala jednak na korzystanie z kont Google.

Odpowiedzi

Po pierwsze, nie rozumiem potrzeby tokenowej weryfikacji CAS, do czego to służy?

Zarówno OpenID, jak i CAS wymagają, aby dostawca identyfikujący zweryfikował dostarczony token. W przeciwnym razie atakujący może być możliwość utworzenia własnego tokena lub użycia tokena, który został utworzony przez użytkownika przed wylogowaniem.

Czy klienci powinni również używać ssl?

Tak.

Po stronie klienta, czy użyłbyś ramki iframe, takiej jak lightbox, aby wyświetlić przekierowaną stronę? Dlaczego/dlaczego nie?

Pełne przekierowanie ekranu jest najprostszą rzeczą do zrobienia. Zacząłbym od tego, żeby to zadziałało. Wiele aplikacji wymaga przeładowania bieżącej strony po zalogowaniu w celu Pokaż części, które są widoczne tylko dla zalogowanych użytkowników.

An Iframe ma problem, którego musisz się pozbyć po zakończeniu logowania. Dla CAS istnieje tutorial Jak bezpośrednio osadzać formularz logowania CAS w kodzie HTML aplikacji. Inną alternatywą jest wyświetlenie wyskakującego okna, tak jak robi to Facebook Connect.

 24
Author: Hendrik Brummermann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-20 22:22:52

Mogę odpowiedzieć na niektóre pytania dotyczące CAS, ponieważ korzystałem z nich wcześniej. Nie mam doświadczenia z OAuth i dlatego Nie będę komentować tego.

Po pierwsze, nie rozumiem potrzeby tokenowej weryfikacji CAS, do czego to służy?

CAS jest używany do celów SSO. Jest używany, gdy masz wiele aplikacji (aplikacje komputerowe / webapps na różnych TLD), które chcą zrobić uwierzytelnianie z jednego źródła.

Czy jest bezpieczniej? Zauważam, że jest oparty na przekierowaniach, a zatem równie podlega atakowi man-in-the-middle, tak jak "niestandardowy" serwer auth bez dodatkowego etapu weryfikacji tokenu. Czy coś mnie ominęło dla ochrony w CAS?

Serwery uwierzytelniania używają SSL, aby zapobiec atakom MitM. Ale nie widzę, jak to specyficzny problem z SSO / CAS, ponieważ miałbyś ten sam problem, nawet jeśli aplikacja robi własne uwierzytelnianie. Może powiesz nam, jakiego rodzaju atakami MitM się martwisz o konfiguracji CAS

Czy celem tokenów jest zapewnienie pojedynczego wylogowania i / lub limitu czasu? (Nie chcemy tego, nasi użytkownicy by nas znienawidzili.) Przyglądałem się CAS, ponieważ jest kilka niesamowitych implementacji Ruby, ale nie jestem pewien, czy tego potrzebujemy.

Tokeny są tylko sposobem, aby aplikacja uwierzytelniła Cię bez posiadania hasła. Są to krótkie żywotność / pojedynczy używany token, który jest powiązany z poświadczeniami użytkownika. Wniosek zapewnia token do serwera CAS i odpowiedź serwera CAS z poświadczeniem, jeśli jest z nim powiązany. Możliwe jest wdrożenie pojedynczego logowania i limitu czasu, ale nie jest to bezpośrednio związane z posiadaniem tokenów.

Mam nadzieję, że to jasne. Chciałem to wyjaśnić na wysokim poziomie. Możesz poprosić o szczegóły, jeśli jest jakaś część, która nie jest jasna lub chcesz uzyskać więcej szczegółów.

EDIT: znalazłem lepsze proste wyjaśnienie jak działa CAS w http://www.jasig.org/cas/proxy-authentication (reszta strony mówi o uwierzytelnianiu proxy. Co jest bardziej złożone, ale kilka pierwszych akapitów jest prostym przypadkiem, o którym tutaj mówimy)

Idę do mojej instancji portalu. Przekierowuje mnie do CAS, aby się zalogować. CAS wykrywa mój Bezpieczny plik cookie i dokonuje jednokrotnego logowania, dzięki czemu nie muszę ponownie podawać nazwy użytkownika i hasła. CAS przekierowuje mnie z powrotem do portalu. Portal sprawdza bilet, loguje mnie do Portal widzę mój domyślny układ wypełniony fajnymi kanałami mówiącymi mi, że na zewnątrz jest naprawdę zimno i co jest w wiadomościach.

Zauważ, że portal nie dostał mojego hasła.

 7
Author: paan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-16 12:58:46

Jest to oparte na moim doświadczeniu: SSO (Single sign on) dotyczy dwóch scenariuszy:- i) znam cię bardzo dobrze (dwie strony zaangażowane) ii) Hey friend, meet my friend (three parties involved)

Oczywiście, drugi scenariusz wymaga mechanizmu przekierowania / przekazania, ponieważ zazwyczaj strona trzecia jest tylko scentralizowaną usługą uwierzytelniania / autoryzacji.

Teraz, implementacja mądry, SSO wymaga dwóch obszarów do oceny: -

A) Jak różne strony / Systemy (czy wewnętrzne/zewnętrzne do danej organizacji) zarządzają poświadczeniami użytkowników. To się nazywa zarządzanie tożsamością.

B) jak informacje SSO powinny przepływać między stronami? Ofcouse bezpiecznie w większości scenariuszy.

Myślę, że zarządzanie tożsamością jest ważniejsze niż określanie, jak bezpiecznie przekazywać informacje, ponieważ w przypadku drugiej części dostępnych jest wiele technik szyfrowania / deszyfrowania. Jest to zarządzanie niestandardowe, które jest niespotykanie różne w jednym zestawie systemów obsługujących SSO.

Teraz Tożsamość zarządzanie może być zaimplementowane za pomocą prostego identyfikatora użytkownika (jeśli jest on dostępny we wszystkich uczestniczących systemach), lub za pomocą opracowanej przez siebie zawartości XML,lub SAML payload, lub tokena strony trzeciej. Myślę, że token jest tylko ogólnym terminem odnoszącym się do kontenera zawierającego poświadczenia użytkownika w bezpieczny sposób, a także informacje o niektórych zastosowanych procedurach bezpieczeństwa.

@Ole, biorąc pod uwagę powyższe podstawy SSO (z mojej perspektywy), myślę, że powinieneś skoncentrować się bardziej na tym, jak użytkownicy i ich role są zidentyfikowane w wielu systemach tj. w Twoim przypadku: - Sklep użytkowników, open outh2 provider; więc umieścić więcej myślenia o zarządzaniu tożsamością.

Jednym z rozwiązań może być (w zależności od budżetu i czasu), Twoje przedsiębiorstwo może poświęcić wysiłek na stworzenie wewnętrznego scentralizowanego interfejsu uwierzytelniania w postaci standardowych technologii integracyjnych dla np. usługi internetowej, a za tymi API możesz mieć dowolną implementację: własnego dostawcy lub OAuth strony trzeciej lub mieszane obu. Możesz wdrożyć warstwa silnika pomiędzy Twoim API a warstwą dostawcy, która jest decydentem. Na przykład silnik może mieć domenę aplikacji i odpowiednie mapowanie dostawcy auth. W ten sposób będziesz miał jednolity interfejs uwierzytelniania dla wszystkich klientów.

Client -- > in-house scentralizowane API -- > Engine --> Auth provider(s) pozwól, że podam ci przykład:- i) możesz mieć odsłonięty Webservice, o nazwie może być singleSigonService. XML payload może wyglądać następująco: -

<SingleSignOnReqType>   <sourceID>XYZ</sourceID>    <source-domain>my-java-app.com</source-domain>  <user-credentials>...</<user-credentials>
        <security-credentials>...</<security-credentials> </SingleSignOnReqType>

Ii) klient usługi internetowej byłby wywołaj SSO do scentralizowanej warstwy silnika (zaimplementowanej w dowolnej technologii), która może wykonywać walidacje i księgowość i może być oparta na domenie źródłowej (np. my-java-app.com) w przychodzącym XML będzie delegować żądanie do dostawcy Oauth2, takiego jak facebook-connect. Tak więc twój silnik, decydent, będzie zarządzał regułami uwierzytelniania, jak wspomniałeś w wymaganiach.

Więc zasadniczo wszystkie aplikacje konsumenckie będą miały ujednolicony interfejs oparty na usługach internetowych do twojego SSO rozwiązanie.To jest to, co mam na myśli w domu scentralizowane API.

 0
Author: ag112,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-21 22:42:06