Jednokrotne logowanie [SSO] w różnych domenach przy użyciu Javy

Wdrażamy Single Sign On [SSO] w wielu aplikacjach, które są hostowane w różnych domenach i na różnych serwerach.

Tutaj wpisz opis obrazka

Teraz, jak pokazano na zdjęciu, Wprowadzamy serwer uwierzytelniania, który faktycznie współdziała z LDAP i uwierzytelnia użytkowników. Aplikacje, które będą używane / rozmawiać z serwerem uwierzytelniania są hostowane na różnych serwerach i domenach.

Dla SSO, nie mogę używać zmiennych sesji, ponieważ są różne serwery i różne aplikacje, różne domeny, zmienna cookie/sesji na poziomie domeny nie jest pomocna.

Szukam lepszego rozwiązania, które może być wykorzystane do SSO w całej ich. Czy istnieje jakaś demonstrowana implementacja? Jeśli tak, napisz go lub wskaż mi właściwy kierunek.

Author: Reddy, 2013-08-08

5 answers

Możesz to osiągnąć, logując się na serwerze auth. Pozostałe aplikacje mogą komunikować się z serwerem auth poprzez tylny kanał. Ogólna zasada jest taka:

  1. Użytkownik uzyskuje dostęp do aplikacji 1.
  2. Aplikacja 1 wymaga zalogowania się użytkownika, więc wysyła token do serwera auth przez tylny kanał. Następnie aplikacja 1 przekierowuje użytkownika do strony logowania na serwerze auth z tokenem jako parametrem na żądanie.
  3. Użytkownik loguje się do serwera auth. Serwer Auth ustawia plik cookie, zaznacza token jako uwierzytelniony i powiązuje z nim dane użytkownika. Serwer Auth następnie przekierowuje użytkownika z powrotem do aplikacji 1.
  4. Aplikacja 1 pobiera żądanie od użytkownika i wywołuje serwer auth na tylnym kanale, aby sprawdzić, czy token jest w porządku. Odpowiedź serwera Auth z danymi użytkownika.
  5. Aplikacja 1 wie teraz, że użytkownik jest autoryzowany i ma kilka podstawowych danych użytkownika.

Teraz tu pojawia się bit SSO in:

  1. Użytkownik uzyskuje dostęp do aplikacji 2.
  2. Aplikacja 2 wymaga zalogowania się użytkownika, więc wysyła token do serwera auth przez tylny kanał. Następnie aplikacja 2 przekierowuje użytkownika do strony logowania na serwerze auth z tokenem jako parametrem na żądanie.
  3. Serwer Auth widzi, że istnieje poprawny plik cookie logowania, dzięki czemu może powiedzieć, że użytkownik jest już uwierzytelniony i wie, kim jest. Serwer Auth oznacza token jako uwierzytelniony i kojarzy użytkownika szczegóły z nim. Serwer Auth następnie przekierowuje użytkownika z powrotem do aplikacji 2.
  4. Aplikacja 2 pobiera żądanie od użytkownika i wywołuje serwer auth na tylnym kanale, aby sprawdzić, czy token jest w porządku. Odpowiedź serwera Auth z danymi użytkownika.
  5. Aplikacja 2 wie teraz, że użytkownik jest autoryzowany i ma kilka podstawowych danych użytkownika.

Istnieje kilka implementacji tej metody, na przykład CAS (centralna usługa uwierzytelniania). Zauważ, że CAS jest obsługiwany z pole w zabezpieczenie sprężyny . Radzę spojrzeć na wykorzystanie istniejącej implementacji, ponieważ pisanie własnych będzie trudne. Uprościłem rzeczy w mojej odpowiedzi i istnieje wiele możliwości wprowadzenia luk bezpieczeństwa, jeśli jesteś w tym nowy.

 42
Author: Qwerky,
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
2017-06-21 10:26:10

Polecam sprawdzić OAuth. Jest to dobry protokół Authenticaiton i autoryzacji używany przez kilka dużych organizacji, w tym facebook, google, windows live i inne. Może mieć początkową krzywą uczenia się, ale jest to rozwiązanie klasy produkcyjnej.

Posiada również biblioteki dla Java, Ruby, PHP i wielu innych języków programowania.

Na przykład dla Javy dostępne są następujące implementacje po stronie serwera.

    Apache Amber (draft 22)
  • zabezpieczenie sprężynowe dla OAuth
  • serwer autoryzacji API (v2-31)
  • Restlet Framework (draft 30)
  • Apache CXF

Dostępne są również następujące biblioteki Java po stronie klienta:

  • Apache Amber (draft 22)
  • Spring Social
  • zabezpieczenie sprężynowe dla OAuth
  • Restlet Framework (draft 30)

Proszę odnieść się tutaj, aby uzyskać więcej informacji:

 3
Author: Gursev Kalra,
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
2013-08-16 14:40:37

Większe pytanie brzmi, jak wdrażasz single sign on. Wiele ofert open source, a nawet własnościowych (IBM Tivoli), wartych swojej soli, oferuje możliwość pojedynczego znaku cross domain. Byłby to najprostszy i najlepszy sposób na wdrożenie cross domain sso. Możesz skonfigurować serwer LDAP, którego używasz na wybranym serwerze sso.

Biorąc na przykład open SSO, oto artykuł do skonfigurowania cross domain single sign on http://docs.oracle.com/cd/E19681-01/820-5816/aeabl/index.html

Aby skonfigurować LDAP w otwartym sso, http://docs.oracle.com/cd/E19316-01/820-3886/ghtmw/index.html

Odniesienie do tej kwestii jest przedstawione w zgrabnym diagramie tutaj http://docs.oracle.com/cd/E19575-01/820-3746/gipjl/index.html

W zależności od tego, z której oferty korzystasz, możesz skonfigurować cross domain single sign on.

Z tym, Twój diagram będzie wyglądał tak, z serwer auth jest narzędziem do interakcji z wybranym serwerem sso.

Posiadanie serwera auth komunikującego się z sso jest zasadą architektury dźwięku. Sugerowałbym wykonywanie połączeń w celu uwierzytelnienia jako punkty końcowe REst, które można wywołać przez http z różnych aplikacji.

Cross Domain single sign on

 1
Author: Ravi,
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
2013-08-14 21:56:46

Nie możesz korzystać z usługi Rest .

Możesz użyć tego, co nazywam uwierzytelnianiem Url Refferer Powiedzmy, że masz uruchomioną aplikację uwierzytelniającą www.AAAA.com W aplikacjach, gdzie chcesz uwierzytelnić, you could have a filter which looks for a authenticated cookie in its domain else redirect to www.AAAA.com for authentication

On Successfull authentication , you could pass the user profile information as encrypted GET / POST data back to the application

 0
Author: Sudhakar,
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
2013-08-08 09:13:26

Odkąd zbudowałem aplikację Java, szukałem dla niej rozwiązania SSO. Znalazłem darmowe Złącze Java SAML, za pomocą którego można osiągnąć SSO w aplikacjach opartych na Javie zbudowanych przy użyciu dowolnego frameworka java.

Oto link do niego - https://plugins.miniorange.com/java-single-sign-on-sso-connector

 -1
Author: Nikhil Badgu,
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
2020-01-20 11:22:49