이 문제는 으로 "사용자의 보안 정보를 교환하기 위해 신뢰할 수있는 네트워크에 배포 된 두 응용 프로그램이 어떻게 안전하게 통신 할 수 있습니까?"입니다. SAML이 신뢰할 수없는 네트워크를 통해 통신하는 응용 프로그램을 해결하는 것과 동일한 문제입니다. 인증 지점 (SP)과 응용 프로그램이 모두 동일한 엔티티 = 예를 들어 제어하에 있다는 사실로 인해 더 쉽게 만들어졌습니다. symetric 암호화를 사용하기 쉽습니다. SP는 원칙적으로 프런트 엔드 채널 (= 웹 브라우저를 통해) 또는 백엔드 채널 (= 네트워크를 통해 서로 직접 연결)을 사용하여 앱과 통신 할 수 있습니다.
통신을 수행하는 다른 방법이 있습니다 (하나, 다른 또는 둘 모두의 채널 사용). 대부분의 보안 제품은 사용 가능한 보안 제품 중 일부를 사용하여 구현할 수 있습니다. 여기에 몇 가지 아이디어가 있습니다 :
모두 SP 및 응용 프로그램이 쿠키를 저장하기 위해 SP를 구성 할 수 있습니다
- 같은 도메인 (= 사용자의 웹 브라우저가 그들을 쿠키를 공유하는 URL에 액세스를) 공유 - 예를 들어 UID 및 인증 된 사용자의 만료일 때 쿠키는 SP와 응용 프로그램에 알려진 공유 암호를 사용하여 암호화 할 수 있습니다. 예를 들어, OpenAM 또는 Wildfly에서 공유 된 도메인으로 암호화 된 쿠키.
- 이 접근법의 대안은 인증 된 사용자에 관한 정보를 SP에서 응용 프로그램으로 전송하는 것입니다. 암호화 된 HTTP POST 매개 변수 - SAML과 유사한 접근 방식으로, 훨씬 더 기본적입니다.
- 다른 보안 공유 저장소를 사용하여 동일한 접근 방식을 강화할 수 있습니다. 기록에 단지 참조를 보내는 데이터베이스 (예 : 고유 비밀 세션 ID)는
SP이 경우 응용 프로그램
- 에 대한 HTTP 프록시로 사용할 수 있습니다
당신이 인증을 통과 할 수 정보를 HTTP 헤더로 응용 프로그램에 전송하려면 SP를 통해 응용 프로그램에 액세스 할 수있는 유일한 방법인지 확인해야합니다. 이는 SP가 예를 들어, 로드 밸런서 (예 : Apache/Nginx 플러그인).
SP 및 응용 프로그램은 인증 데이터
- 당신은 예를 들어, 사용할 수를 전달하기 위해 표준 인증 메커니즘을 사용할 수 있습니다Kerberos (공유 암호 암호화 기반) 또는 OAuth
각 옵션에는 서로 다른 공격 경로와 가능한 취약점이있을 수 있습니다.
제 의견으로는 SAML 지원과 함께 HTTP 프록시를 사용하는 SAML 기능을 추가하거나 SP와 애플리케이션 (예 : OpenAM) 사이의 마지막 마일 인증을 처리하는 표준 제품을 사용하는 것이 가장 좋은 방법입니다. 사용자 지정 보안 메커니즘을 구현하는 것이 쉬운 것처럼 보일 수 있지만, 전체 솔루션을 취약하게 만드는 실수를 범할 여지가 많습니다.
순수 SAML 관점에서 보면 '실제 응용 프로그램'은 SAML 서비스 공급자를 구현해야합니다. Spring SAML 샘플 애플리케이션과 마찬가지로 '실제 애플리케이션'이이를 수행 할 수없는 경우 (예 : 확장 포인트가없는 제품이기 때문에 SSO와 관련하여 응용 프로그램의 기능을 확인해야합니다. 예. 일부 앱에서는 맞춤 HTTP 요청 헤더를 사용하여 SSO를 제공 할 수 있습니다. 그런 다음 SAML 어설 션을 기반으로 해당 헤더를 삽입하는 HTTP 역방향 프록시를 사용할 수 있습니다. mod_auth_mellon이있는 Apache HTTP 서버. –
@BernhardThalmayr IdpProxy 시나리오를위한 솔루션을 찾았다면 걱정할 필요가 없었습니다. 심지어 시보레는 그렇게 할 수있는 방법이 없습니다. IdpProxy에 대해 알고 있습니까? – pinkpanther
@BernhardThalmayr는 openam이 무료입니까? – pinkpanther