한국어
  • SSO SAML

IdP-initiated SSO vs SP-initiated SSO

IdP-initiated SSO와 SP-initiated SSO의 차이점과 SP-initiated SSO가 더 안전한 이유에 대해 알아보세요.

Simeng
Simeng
Developer

IdP-initiated SSO vs SP-initiated SSO

Terminology

  • Identity Provider (IdP): 사용자 신원을 저장하고 인증하는 서비스입니다.
  • Service Provider (SP): 사용자에게 서비스를 제공하는 웹 또는 서비스입니다.
  • Single Sign-On (SSO): 하나의 로그인 자격 증명 세트(예: 이름 및 비밀번호)를 사용하여 여러 애플리케이션에 접근할 수 있는 세션 및 사용자 인증 서비스입니다.
  • SAML: 보안 어설션 마크업 언어는 특히 IdP와 서비스 제공자 간에 인증 및 권한 부여 데이터를 교환하기 위한 개방형 표준입니다. SSO에 일반적으로 사용되는 프로토콜입니다. 사용자가 IdP에 의해 성공적으로 인증되면 IdP는 SAML 어설션을 SP에 보내며, SP가 이를 검증하고 사용자에게 접근 권한을 부여합니다.
  • OIDC: OpenID Connect는 SSO를 위한 보다 현대적이고 안전한 프로토콜입니다. 이는 OAuth 2.0을 기반으로 구축되었으며, IdP에 의해 수행된 인증에 기반하여 사용자의 신원을 확인하는 방법을 제공합니다. 사용자가 IdP에 의해 성공적으로 인증되면 IdP는 JWT 형식의 토큰을 SP에 보내며, SP가 이를 검증하고 사용자에게 접근 권한을 부여합니다.

SP-initiated SSO

이름에서 알 수 있듯이 SP-initiated SSO는 서비스 제공자가 시작합니다. 사용자는 SP의 웹사이트에서 리소스를 접근함으로써 인증 프로세스를 시작합니다. SP는 사용자를 인증을 위해 IdP로 리디렉션 합니다. 사용자가 인증되면, IdP는 토큰(OIDC) 또는 SAML 어설션(SAML)을 생성하여 SP로 보냅니다. SP는 토큰이나 어설션을 검증하고 사용자에게 접근 권한을 부여합니다.

  1. 사용자가 SP의 웹사이트를 방문하여 리소스를 접근합니다.
  2. 사용자가 SSO 제공자의 로그인 버튼(예: Google, Azure AD, Okta 등)을 클릭합니다.
  3. SP가 사용자를 인증을 위해 IdP로 리디렉션합니다.
  4. 사용자가 IdP에 로그인합니다.
  5. IdP가 토큰 또는 어설션을 SP에 보냅니다.
  6. SP가 토큰이나 어설션을 검증하고 사용자에게 접근 권한을 부여합니다.

IdP-initiated SSO

SP-initiated SSO와 달리, IdP-initiated SSO는 신원 제공자가 시작합니다. 사용자는 IdP의 웹사이트에서 인증 프로세스를 시작합니다. 일반적으로 사용자는 IdP 포털에서 지원되는 SP 애플리케이션 리스트를 볼 수 있습니다. 사용자는 SP 애플리케이션을 클릭하고 사전 인증된 신원으로 SP의 웹사이트로 리디렉션됩니다.

IdP-initiated SSO

  1. 사용자가 IdP에 로그인합니다.
  2. 사용자가 IdP 포털을 방문하여 SP 애플리케이션을 선택합니다.
  3. IdP는 사용자의 현재 세션을 검증하고 사용자를 사전 인증된 SSO 신원으로 SP로 리디렉션합니다.
  4. SP는 SSO 신원을 검증하고 사용자에게 접근 권한을 부여합니다.

Idp-initiated SSO vs SP-initiated SSO

IdP-initiated SSO의 SP-initiated SSO에 비한 장점

IdP-initiated SSO는 Workday, Salesforce와 같은 다양한 서드파티 애플리케이션이나 서비스에 의존하는 대기업과 조직에서 더 많이 채택됩니다. 이는 사용자 접근을 여러 애플리케이션으로 중앙에서 관리하고 SSO 인증을 강제하는 방법을 제공합니다. IdP-initiated SSO를 활성화하면 직원들이 각 애플리케이션의 웹사이트를 방문할 필요 없이 IdP의 포털에서 직접 연결된 애플리케이션에 접근할 수 있습니다. 이는 온보딩 시간을 줄이고 사용자 경험을 향상시킵니다.

IdP-initiated SSO의 SP-initiated SSO에 비한 위험

IdP-initiated SSO는 SP-initiated SSO에 비해 더 많은 위험을 가지고 있습니다.

  1. 인증 컨텍스트 부족: IdP에서 시작된 모든 인증 요청은 비자발적입니다. 따라서 SP는 인증 프로세스를 시작하며, 이는 비인가된 접근에 대한 문이 열릴 수 있습니다. 사용자의 세션이 하이재킹될 위험이 있습니다. 악의적인 행위자가 사용자의 지식이나 동의 없이 합법적 사용자를 위한 로그인 프로세스를 시작할 수 있습니다.

  2. 세션 고정: SP가 인증 프로세스를 시작하지 않으므로, 사용자의 세션이 IdP의 세션으로 고정될 수 있습니다. 이는 공격자가 사용자의 세션을 IdP의 세션으로 고정할 수 있는 세션 고정 공격으로 이어질 수 있으며, 사용자의 계정에 비인가된 접근을 허용할 수 있습니다.

  3. 피싱 공격: IdP-initiated SSO는 피싱 공격에 취약할 수 있습니다. 악의적인 행위자가 사용자를 가짜 IdP 포털로 유도하여 사용자의 자격 증명을 훔칠 수 있습니다. 사용자가 로그인하면, 공격자는 사용자를 사전 인증된 신원으로 SP로 리디렉션할 수 있습니다.

  4. 요청 검증에 대한 보증 없음: SP-initiated SSO에서는 일반적으로 SP가 IdP에 요청에서 필요한 보안 정보를 포함하여 요청의 무결성을 유지합니다. SP가 인증 응답을 받으면 CSRF 공격을 방지하기 위해 이 정보를 검증합니다. 예를 들어, OIDC의 state 매개변수와 SAML의 RelayState. 그러나 IdP-initiated SSO에서는 SP가 인증 프로세스를 시작하지 않으므로, SP는 요청 검증에 대한 보증이 없습니다.

IdP-initiated SSO의 SP-initiated SSO에 비한 제한 사항

앞서 설명한 취약점 때문에 IdP-initiated SSO는 OIDC에 의해 지원되지 않습니다. OIDC는 요청의 무결성을 보장하기 위해 SP가 인증 프로세스를 시작하도록 요구합니다. 사용자가 SP가 아닌 서드파티로부터 인증 프로세스를 시작하는 경우에도, 사용자는 인증 프로세스를 시작하기 위해 먼저 SP로 리디렉션되어야 합니다.

그러나 SAML에서는 IdP-initiated SSO가 가능합니다. IdP는 SP가 인증 프로세스를 시작하지 않고도 SAML 어설션을 생성할 수 있습니다. SAML IdP-initiated SSO에서는 적절한 RequestIDRelayState 없이 SAML 어설션이 SP의 ACS URL로 직접 전송될 수 있습니다. SP는 이런 종류의 어설션을 처리하고 사용자에게 접근 권한을 부여할 수 있어야 합니다. (참고: RequestIDRelayState가 없으면 SP는 요청의 무결성에 대한 보증이 없습니다).

결론

IdP-initiated SSO는 사용자 접근을 여러 애플리케이션으로 중앙에서 관리할 수 있는 방법을 제공하지만, SP-initiated SSO에 비해 더 많은 위험을 내포하고 있습니다. SP-initiated SSO는 더 안전하며 인증 요청의 무결성에 대한 더 많은 보증을 제공합니다. OIDC 및 SAML 기반 SSO에 대해 SP-initiated SSO를 사용하는 것이 권장됩니다.