3

저는 SAML SSO의 지원을 구현하여 내 애플리케이션을 Spring Security SAML Extension을 사용하는 서비스 공급자로 사용하도록했습니다. 내 SP를 다른 IDP와 통합 할 수있었습니다. 예를 들어 의 HostA, HostB 및 HostC은 모두 내 응용 프로그램의 인스턴스가 다릅니다. 각 호스트에 대해 SP 메타 데이터 파일을 지정하고 해당 호스트의 URL (예 : https : HostA.com/myapp/saml/sso)로 AssertionConsumerServiceURL을 설정했습니다. 각 메타 데이터 파일을 IDP에 추가하고 모두 테스트하여 제대로 작동합니다.고 가용성을 위해 HTTP 서버를 사용할 때의 SAML 동작

그러나 내 프로젝트는로드 균형 조정을 위해 IBM HTTP Server를 구성하여 고 가용성을 지원합니다. 따라서이 경우 HTTP 서버는 호스트 (A, B, C)을로드 균형 조정에 사용되는 호스트로 구성하고 사용자는 https : httpserver의 HTTP 서버 URL을 사용하여 내 응용 프로그램 에 액세스합니다. COM/MyApp를/나는 하나 개의 SP 메타 데이터 파일을 정의하고 AssertionConsumerServiceURL (https://httpserver.com/saml/sso)에 지정된 HTTP 서버의 URL을 가지고 내 HTTP 서버를 대상으로 주장을 받아 들일 수 내 구현을 변경 한 경우

, 가 될 것인가 이 시나리오의 결과 :

  1. 사용자가 HostA (배후)에 사용자를 파견 한 HTTPServer에 액세스합니다.
  2. HostA의 내 SP 응용 프로그램이 인증을 위해 IDP에 요청을 보냅니다.
  3. IDP는 내 httpserver에 대한 응답을 https://httpserver.com/saml/sso으로 다시 보냅니다.

는 HTTP 서버는 다음과 같이 그것을 가지고, 호스트 A로 리디렉션됩니다 : https://HostA.com/saml/sso

감사합니다.

답변

4

부하 분산 장치 뒤에 클러스터 모드로 동일한 응용 프로그램 인스턴스를 배포하는 경우 백엔드 응용 프로그램에 배포 된 HTTP 서버 (https://httpserver.com/myapp/)의 공용 URL에 대해 지시해야합니다. SAMLContextProviderLB을 사용하여이 작업을 수행 할 수 있습니다 (manual의 더 자세한 내용 참조). 하지만 이미이 단계를 성공적으로 수행 한 것 같습니다.

HTTP 서버가 요청을 받으면이를 호스트 중 하나 (예 : URL)로 전달합니다. https://HostA.com/saml/sso이며 일반적으로 원본 URL을 HTTP 헤더로 제공합니다. SAMLContextProviderLB은 SP 응용 프로그램이 실제 URL이 https://httpserver.com/saml/sso이라고 생각하게하여 대상 URL과 관련된 SAML 보안 검사를 모두 통과하게합니다.자신의 HttpSessions에서 백엔드 애플리케이션 스토어 상태로

중 하나를 수행해야합니다 다음

  • 하는 관련 요청이 항상 동일한 서버
  • 로 이동하는 HTTP 서버 (그래서 까다로운 세션 가능
  • 귀하의 봄 구성에서 콩 EmptyStorageFactory를 포함하여 클러스터에서 응답 ID의
  • 비활성화 검사를 HTTP 세션을 복제해야합니다 (이 옵션은 사용할 수 없습니다 싱글 로그 아웃합니다)
+0

블라디미르 감사합니다. 나는이 해결책을 시도하고 결과로 당신에게 돌아올 것입니다. –

+0

HTTP 서버를 설치하고 위의 변경 사항을 적용하면 정상적으로 작동합니다. 고맙습니다. –