2017-05-09 18 views
1

SAML 용 SSO 기반 서비스 공급자로 시작했습니다. 사용자는 로그인을 계속하기 전에 전자 메일을 입력해야하므로 상태 변수가 시작되어 SSO로 전달됩니다. 그것은 콜백 URL을 통해 다시 돌아오고 그러므로 정신의 목적을 다시 확인했습니다. 그것은 CSRF 공격으로부터 보호 받았다.아이디 공급자 (IdP)에서 상태 매개 변수를 유지 관리하는 방법 SAML sso?

이제 IdP에서 시작한 SSO로는 상태 변수를 전혀 설정할 수 없습니다. ID 제공자에서 로그인이 시작되고 인증 토큰 만이 앱에 제공됩니다. 어떤 사용자가 처음부터 인증하는지 모르겠습니다. 상태 변수 검사를 제거하면 CSRF 공격도 트리거 될 수 있습니다.

나는 omniauthrails에서 사용하고 있는데, 이는 상태 변수를 강제 매개 변수로 만들고 SSO 공급자는 auth0입니다.

IdP에서 시작한 SSO 솔루션에 상태 변수를 연결하는 방법은 무엇입니까?

답변

2

IDP-init-SSO SAML 흐름의 RelayState 매개 변수의 사실상 표준 값은 SP에서 SAML 어설 션의 성공적인 유효성 검사 후 사용자를 보내려는 URL입니다. SAML 배포의 대다수는 저것이 작동 할 것입니다.

그러나 실제로이 메커니즘은 CSRF 공격으로부터 보호하지 못하기 때문에 IDP-init-SSO에서이 사양이 RelayState 값에 대해 침묵하고 IDP와 SP 사이의 메커니즘에 합의하여 CSRF가 그 매개 변수의 값. 이러한 메커니즘 중 하나는 RelayState에서 부호있는 값을 사용하는 것이지만 표준화 된 것은 없으므로 확장되지 않는 IDP와 SP 사이의 양방향 계약에 따라 달라질 것입니다.

요약하면 사용자가 이동하려는 URL의 값을 SP에 보내는 "원치 않는"SAML 응답의 RelayState 값으로 보내십시오. IDP의 SAML 스택을 얻는 방법은 구현에 따라 다릅니다. Auth0에 대한 내용은 https://auth0.com/docs/protocols/saml/saml-configuration#idp-initiated-sso에서 읽을 수 있으며 귀하의 경우 다음과 같이 표시됩니다 : https://{accountname}.auth0.com/samlp/YOUR_CLIENT_ID?RelayState=http://FINAL_DESTINATION_URL