본문 바로가기
줌 설정

싱글 사인온 온 (SSO)의 이해

by 라인하트 2022. 2. 16.

     몇 년전부터 SSO를 이용한 인증 프로세스를 도입하는 기업이 늘어나고 있습니다. 이제 SSO는 클라우드 엔지니어들이 반드시 알아야 하는 기술입니다. SSO가 무엇인지 쉽게 이해하기 위해 호텔 체크인 사례를 예로 인증과 권한을 설명합니다. 

 

   호텔에서 체크인(Check-in)을 하는 과정을 생각해 봅시다. 안내 데스크의 직원은 투숙객에게 여권(패스포트)이나 신분증을 요구합니다. 직원은 신분증과 얼굴을 비교하여 동일 인물이라는 것을 확인하고, 체크인 수속을 마치고 호텔방키를 줍니다. 호텔방키는 호텔 내에서 사용하는 만능키입니다. 호텔방의 문을 열 수 있고, 호텔 수영장과 헬스장의 문도 열 수 있습니다. 즉, 체크인 후부터 호텔 직원들은 여권이나 신분증을 요구하지 않고 호텔방키를 확인합니다.  

 

 

   기술적으로 정리하면, 호텔은 신분증과 얼굴을 대조하여 인증을 진행하고, 호텔방키로 권한을 부여합니다. 신분증은 사용자명과 패스워드 조합이고, 호텔방키를 권한 토큰 (Authorization Token) 입니다. 여러분은 단 한번의 체크인으로 호텔 내의 모든 서비스를 이용할 수 있습니다. 사용자 편의성과 보안 측면에서 매우 효율적입니다. 

 

   SSO는 Single Sign On의 약어로 사용자가 단 한번의 인증 절차만으로 다수의 애플리케이션에 접속하는 인증 프로세스입니다. 정해진 기간 동안 여러 애플리케이션을 이동하더라도 사용자는 추가적인 인증을 할 필요없고, 애플리케이션마다 인증절차를 거치지 않으므로 다수의 패스워드를 기억필요가 없습니다.  

   SSO는 세 가지 컴포넌트가 유기적으로 동작합니다. 

  • RP (Relying Party) 또는 SP(service provider) : 사용자가 사용할 서비스
    사용자가 접근하려는 서비스 또는 애플리케이션

  • IdP (Identity Provider) : 인증 대행 서버
    사용자 인증을 대행한 후 이름, 역할, 주소 등의 속성과 같은 정보 (Token)를 할당한다. 

   SSO는 사용자가 SP에서 사용자 인증을 수행하는 것이 아니라 SP는 인증을 IdP 서버에 위임합니다. IdP 서버는 사용자 인증을 수행하고, 사용자 인증 결과와 사용자에게 부여된 권한을 정리한 토큰을 사용자에게 줍니다.  사용자는 토큰으로 SP 서비스를 이용합니다. 따라서, SP는 사용자의 패스워드를 보관할 필요가 없습니다.

 

   SSO 는 두 가지 방식으로 구현합니다. 큰 차이는 인증 요청의 시작을 어디서 하느냐의 차이입니다. 

 

  • IdP-Initiated SSO (Unsolicited WebSSO)
       인증 요청이 IdP에서 시작되는 페더레이션 프로세스입니다. 사용자는 IdP로 직접 로그인을 시도 한 후에 SP에 접속하을 시도하면 SAML Response을 IdP로 부터 받아서 SP의 ACS URL에 포스팅하여 접속합니다.    

  • SP-intiated SSO
       인증 요청이 SP에서 시작되는 페더레이션 프로세스입니다. 사용자는 SP에 접속하면 자동으로 인증과정이 IdP 로 리다이렉트됩니다. 사용자는 IdP가 보내는 인증 양식에 따라 로그온을 한 후 SAML Response를 SP의 ACS URL에 포스팅하여 접속합니다.   

   SSO 구현할 때 일반적으로 사용하는 프로토콜은 두 가지 입니다. 

  • SAML (Security Assertion Markup Language)
    보안 도메인 간에 인증과 권한 데이타를 교환하기 위해 만들어진 프로토콜입니다. SAML 2.0은 iDP와 SP 사이에 사용자에 대한 권한 정보가 들어 있는 보안 토큰을 이용하여 보안정보를 교환하는 XML 기반의 표준 프로토콜입니다. 

  • OATH 
    권한 부여를 위한 표준 프로토콜입니다. 일반적으로 패스워드를 드러내지 않고 마이크로소프트, 구글, 페이스북 또는 트위터 계정을 이용하여 다른 웹사이트에 로그온 하려고 할때 주로 사용합니다. 
 
   기업에서 사용하는 애플리케이션에 대한 SSO를 구현하기 위해서는 SAML을 주로 사용합니다. 
 
<추신 > 

이 글은 필자가 nexpert.tistory.com 에 정리한 글을 복붙하였습니다.