0

IDP와 SP 사이의 통신은 표준에서 잘 정의되어 있음을 이해합니다. 독립형 SP와 실제 응용 프로그램간에 맞춤식 통신을 수행하는 방법이 무엇인지 궁금합니다.SAML에서 서비스 공급자와 실제 응용 프로그램 간의 통신은 어떻게 이루어 지나요?

나는 바퀴가 내 자신을 reinventing 않고 표준 방법이 존재한다고 가정합니다. 그러나 심지어 spring-saml security은 "사용자 지정 메커니즘"에 대해서만 말하고 그것이 무엇인지 말하지 않습니다.

누군가 내게 올바른 방향을 가리킬 수 있습니까? 나는 검색했지만 블로그, 튜토리얼 등 어디에도 쓰여지지 않는다는 것에 놀랐다. Shibboleth/Gluu 문서조차도 그 부분이 어떻게 든 혼자 남겨져있다.

도움을 주시면 감사하겠습니다.

+0

순수 SAML 관점에서 보면 '실제 응용 프로그램'은 SAML 서비스 공급자를 구현해야합니다. Spring SAML 샘플 애플리케이션과 마찬가지로 '실제 애플리케이션'이이를 수행 할 수없는 경우 (예 : 확장 포인트가없는 제품이기 때문에 SSO와 관련하여 응용 프로그램의 기능을 확인해야합니다. 예. 일부 앱에서는 맞춤 HTTP 요청 헤더를 사용하여 SSO를 제공 할 수 있습니다. 그런 다음 SAML 어설 션을 기반으로 해당 헤더를 삽입하는 HTTP 역방향 프록시를 사용할 수 있습니다. mod_auth_mellon이있는 Apache HTTP 서버. –

+0

@BernhardThalmayr IdpProxy 시나리오를위한 솔루션을 찾았다면 걱정할 필요가 없었습니다. 심지어 시보레는 그렇게 할 수있는 방법이 없습니다. IdpProxy에 대해 알고 있습니까? – pinkpanther

+0

@BernhardThalmayr는 openam이 무료입니까? – pinkpanther

답변

1

이 문제는 으로 "사용자의 보안 정보를 교환하기 위해 신뢰할 수있는 네트워크에 배포 된 두 응용 프로그램이 어떻게 안전하게 통신 할 수 있습니까?"입니다. 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) 사이의 마지막 마일 인증을 처리하는 표준 제품을 사용하는 것이 가장 좋은 방법입니다. 사용자 지정 보안 메커니즘을 구현하는 것이 쉬운 것처럼 보일 수 있지만, 전체 솔루션을 취약하게 만드는 실수를 범할 여지가 많습니다.

+0

답변 해 주셔서 감사합니다. 프론트 채널 아이디어와 같은 줄로 생각했지만 SAML이 해결 한 것과 같은 문제입니다. OpenAM이 복잡한 IDP 프록시 사용 사례를 지원하는지 알고 있습니까? 사용자/전자 메일 접미사 기반 IDP 선택과 유사합니까? 나는 실제로 이런 종류의 오픈 소스 솔루션이 없기 때문에 SAML v2 IDP 프록시를 구현하고자했다. SP가 여러 개의 IDP를 통신하도록하고 싶었고 SSO를 제공하면서 각 애플리케이션에 SP가 있으면 단일 서명이 ' 서로 다른 IDP를 사용하여 인증되었을 수 있기 때문에 일어 났으므로 여러 프록시 IDP를 원했습니다. – pinkpanther

+0

유스 케이스에 대해 설명합니다. 외부 조직에 속한 여러 사용자, 여러 IDP. 그러나 SP는 하나의 조직 (일종의 SaaS)의 일부이며, SP가 IDP에 접속할 때마다 사용자 브라우저가 중간 IDP를 통해 이미 인증 한 경우 인증 할 수 있어야합니다. https://spaces.internet2.edu/display/GS/SAMLIdPProxy – pinkpanther

+0

OpenAM은 IDP 프록시의 역할을 할 수 있습니다. 예를 들어, OpenAM은 IDP 프록시의 역할을 할 수있는 IDP를 정의 할 수 있습니다. 하지만 OpenAM 제품을 사용하는 경우를 가능하게하는 것은 어렵습니다. 이 제품은 매우 복잡하고 오래된 제품이므로 전문적인 컨설팅이 필요할 수도 있습니다. 보유하고있는 필요성은 엔터프라이즈 싱글 사인온에 가깝습니다. 오픈 소스 Gluu에서이 문제 (https://www.gluu.org/) 및 CAS (https://www.apereo.org/)를 처리 할 수 ​​있습니다. projects/cas)가 더 좋을 수도 있습니다. –