여러 ID 제공자로 구성된 앱에서 Spring SAML을 구현 중입니다. 내 IdP 메타 데이터 구성에 이있는 이 여러 개 있고 각 IdP에 별칭이 있습니다. 앱에서 SAMLContextProvider
을 비슷한 방법으로 연장하여 사용할 제공자를 this으로 선택합니다.SAMLCredential.getRemoteEntityID()를 신뢰할 수 있습니까?
IdP가 인증을 전송하면 내 응용 프로그램이 어떤 IdP를 제공했는지 (다른 공급자는 다른 보안 권한을 가짐) 알고 있어야합니다. 나는 docs 제안으로하고 어떤 사용자 IdP가 요청을했는지 확인하기 위해 사용자 지정 SAMLUserDetailsService
과 SAMLCredential.getRemoteEntityID()
을 사용합니다.
제 질문은 공급자를 식별하기 위해 remoteEntityID에 의존 할 수 있습니까? 한 IdP 공급자가 다른 엔터티 ID 또는 다른 공급자와 동일한 "위조 된"엔터티를 포함하도록 메타 데이터를 업데이트하면 어떻게됩니까? 우리가 정의한 동료 별칭을 사용하는 것이 더 좋지 않겠습니까?
저는 SAML을 처음 사용하기 때문에 기본 개념에 대한 이해가 잘못되었을 가능성이 있습니다.이 구성으로 보안 구멍을 열지 않았는지 확인하고 싶습니다.
테스트에 좋은 아이디어입니다. 그리고 오류를 알면 좋았습니다. 'HTTPMetadataProvider'를 사용하여 IdP 메타 데이터를로드합니까? –
나는 여전히 (아마도 매우 드문 경우)이 시나리오에서 여전히 요청을 위조하는 것이 가능할 수도 있다고 생각한다. 우리는 여러 개의 IdP (서로에 대해 적대적 일 수 있습니다)를 신뢰한다고 가정하면, 자신의 메타 데이터를 변경하여 다른 공급자의 entityID를 만들려고 시도하면 ('HTTPMetadataProvider'에 의해 내 측면에서 다시로드 됨) 여러 메타 데이터 항목이 동일한 entityID (아마도 가능하지 않을 수도 있습니다). IdP 둘 중 하나의 요청은 우리가 그들을 신뢰하기 때문에 서명되고 수락됩니다. 확실히 알 수있는 유일한 방법은 그것을 밖으로 시도하는 것입니다! –
내게 정의 된 ID (즉, 별칭)에서 결정을 내림으로써 쉽게 위험을 감수 할 수있을 때 제공자가 정의한 ID (즉, entityID)를 기반으로 권한 결정을 내리는 것이 안전하지 않은 것처럼 보입니다. –