2014-09-24 12 views
6

Chcę zapamiętać parametr żądania adresu URL z pierwszego żądania mojej strony (SP) i użyć ich po odpowiedzi od dostawcy.Spring saml - jak zapamiętać parametr żądania podczas inicjowania logowania na SP, i przetwarzanie ich po odpowiedzi IdP

Używam rozszerzenia spring-saml i myślę o atrybucie relayState, ale nie mogę znaleźć przykładu, jak skompilować go z parametrami z żądania.

Potrzebuję tego dla przekierowania użytkownika po procesie uwierzytelniania sso na stronę docelową (moduł aplikacji) w zależności od tego, co było w pierwszym żądaniu.

Odpowiedz

14

Przykładowa aplikacja Spring SAML działa tak po wyjęciu z pudełka. Gdy użytkownik kliknie stronę, która jest chroniona przez wiosennym Bezpieczeństwa i wymaga systemu uwierzytelniania:

  • zapamiętuje parametry, które zostały użyte do wywołania strony (wykonane automatycznie wewnątrz Wiosna zabezpieczeń za pomocą ExceptionTranslationFilter i HttpSessionRequestCache) poprzez przechowywanie informacji w sesji HTTP
  • wywołuje skoku punktu saml za wejście (SAMLEntryPoint klasy), który przekierowuje użytkownika do IDP, jest możliwe po wyborze IDP
  • użytkownik uwierzytelnia w IDP jest przekierowany z powrotem do aplikacji
  • Wiosna SAML weryfikuje odpowiedź i ja nvokes AuthenticationSuccessHandler, który (w przykładowej aplikacji) jest typu org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler
  • program obsługi sukcesu sprawdza, czy istnieje zapisane żądanie (umieszczone w pierwszym kroku), a jeśli tak, to powoduje, że przeglądarka użytkownika otwiera otwartą stronę z tym samym zestawem parametrów jak początkowo
  • kontrola bezpieczeństwa powinien teraz przechodzą, pod warunkiem, że uwierzytelniony użytkownik jest uprawniony do dostępu do strony

można by oczywiście wdrożyć ten stan za pomocą przekaźnika od zamierzonych. Prawidłowym sposobem ustawienia stanu przekaźnika jest rozszerzenie SAMLEntryPoint, przesłanianie metody getProfileOptions i zwrócenie pożądanego stanu przekaźnika w zwróconym obiekcie WebSSOProfileOptions.

Następnie można zmienić AuthenticationSuccessHandler na org.springframework.security.saml.SAMLRelayStateSuccessHandler, które przekierowują do adresu URL zwróconego ze stanu przekazywania po pomyślnym uwierzytelnieniu.

+0

Świetnie! Potrzebuję dokładnie tego zdania: "Prawidłowym sposobem ustawienia stanu przekaźnika jest rozszerzenie SAMLEntryPoint, nadpisanie metody getProfileOptions i zwrócenie pożądanego stanu przekaźnika w zwróconym obiekcie WebSSOProfileOptions." Wielkie dzięki. –

+0

relayState był dobrym sposobem przekazywania kontekstu między serwerem uwierzytelniającym a klientem. Dzięki za wskazówkę! –

Powiązane problemy