SAML
SAML(Security Assertion Markup Language)은 기업과 조직에서 단일 로그인(SSO, Single Sign-On)과 신원 연합(Identity Federation)을 구현하기 위한 XML 기반 표준 프레임워크이다. 이 강력한 인증 기술은 현대 기업 환경에서 사용자 인증 및 권한 관리를 간소화하는 핵심 요소로 자리 잡았다.
SAML의 기본 개념
SAML은 2002년 OASIS(Organization for the Advancement of Structured Information Standards)에 의해 처음 표준화되었으며, 현재는 SAML 2.0 버전(2005년 발표)이 가장 널리 사용되고 있다.
이 프로토콜의 주요 목적은 다음과 같다:
- 단일 로그인(SSO) 구현: 사용자가 한 번만 인증하여 여러 애플리케이션에 접근할 수 있도록 한다.
- 신원 정보 교환: 신원 공급자(IdP)와 서비스 공급자(SP) 간에 인증 정보를 안전하게 교환한다.
- 권한 부여 결정: 사용자의 접근 권한에 대한 정보를 전달한다.
SAML의 주요 구성 요소
SAML 생태계는 다음 세 가지 주요 구성 요소로 이루어져 있다:
주체(Principal)
주체는 인증을 요청하는 사용자(일반적으로 브라우저를 통해)이다.
신원 공급자(Identity Provider, IdP)
신원 공급자는 사용자 인증을 수행하고 SAML 어설션(Assertion)을 발행하는 시스템이다.
주요 기능은 다음과 같다:
- 사용자 자격 증명 확인
- 인증 상태 관리
- SAML 어설션 생성 및 서명
- 사용자 속성 및 권한 정보 제공
대표적인 IdP 제품/서비스:
- Microsoft Active Directory Federation Services (AD FS)
- Okta
- OneLogin
- Ping Identity
- Azure Active Directory
서비스 공급자(Service Provider, SP)
서비스 공급자는 사용자가 접근하려는 애플리케이션이나 서비스이다.
주요 기능은 다음과 같다:
- SAML 어설션 수신 및 검증
- 사용자 세션 생성
- 접근 제어 결정
SAML 어설션(Assertions)
SAML의 핵심은 ‘어설션’이다.
어설션은 IdP가 생성하는 XML 문서로, 다음과 같은 정보를 포함한다:
- 인증 어설션(Authentication Assertions): 사용자가 인증되었음을 확인한다.
- 속성 어설션(Attribute Assertions): 사용자에 대한 추가 정보(이름, 이메일, 부서 등)를 제공한다.
- 권한 부여 결정 어설션(Authorization Decision Assertions): 사용자가 특정 리소스에 접근할 수 있는지 여부를 나타낸다.
SAML 어설션의 예:
|
|
SAML 흐름(Flows)
SAML에는 두 가지 주요 흐름이 있다:
SP-초기화 흐름(SP-Initiated Flow)
이 흐름에서는 사용자가 먼저 서비스 공급자(SP)에 접근한다:
- 사용자가 SP 웹사이트/서비스에 접근을 시도한다.
- SP는 사용자가 인증되지 않았음을 감지하고 SAML 인증 요청을 생성한다.
- SP는 사용자 브라우저를 IdP로 리다이렉트한다(SAML 요청 포함).
- IdP는 사용자 인증을 수행한다(로그인 화면 표시 등).
- 인증 성공 후, IdP는 SAML 어설션을 생성한다.
- IdP는 사용자 브라우저를 SAML 어설션과 함께 SP로 다시 리다이렉트한다.
- SP는 SAML 어설션을 검증하고 사용자에게 접근 권한을 부여한다.
IdP-초기화 흐름(IdP-Initiated Flow)
이 흐름에서는 사용자가 먼저 신원 공급자(IdP)에 접근한다:
- 사용자가 IdP 포털에 로그인한다.
- 사용자는 접근하려는 애플리케이션(SP)을 선택한다.
- IdP는 SAML 어설션을 생성한다.
- IdP는 사용자 브라우저를 SAML 어설션과 함께 SP로 리다이렉트한다.
- SP는 SAML 어설션을 검증하고 사용자에게 접근 권한을 부여한다.
SAML 구현 예제: Python
다음은 Python에서 SAML SP(서비스 공급자)를 구현하는 간단한 예제:
|
|
이 코드는 Flask 웹 애플리케이션에서 SAML 서비스 공급자를 구현한 예이다.
주요 구성 요소는 다음과 같다:
- 로그인 엔드포인트(
/login/
): SP-초기화 SSO 프로세스를 시작한다. - 어설션 소비자 서비스(
/acs/
): IdP로부터 SAML 응답을 처리한다. - 로그아웃 엔드포인트(
/logout/
): 사용자 로그아웃을 처리한다. - 메타데이터 엔드포인트(
/metadata/
): SP 메타데이터를 제공한다.
SAML의 장단점
장점
- 중앙화된 인증: 사용자 자격 증명을 한 곳에서 관리할 수 있어 보안이 향상된다.
- 통합 사용자 경험: 사용자는 여러 애플리케이션에 개별적으로 로그인할 필요가 없어 경험이 향상된다.
- 강력한 보안: XML 서명과 암호화를 통해 메시지 무결성과 기밀성을 보장한다.
- 엔터프라이즈 지원: 대부분의 기업용 애플리케이션과 서비스에서 SAML을 지원한다.
- 상호 운용성: 다양한 플랫폼과 공급업체 간에 호환된다.
- 감사 및 규정 준수: 중앙화된 인증을 통해 감사 추적 및 규정 준수가 용이해진다.
단점
- 복잡성: 구현과 디버깅이 복잡하며 XML 처리가 필요하다.
- 모바일 한계: 모바일 애플리케이션에서는 제한적으로 사용된다.
- 오버헤드: XML 형식은 JSON에 비해 더 많은 대역폭을 사용한다.
- 설정 복잡성: SP와 IdP 간의 초기 설정이 복잡하다.
- 최신 앱 통합의 어려움: 최신 SPA(Single Page Application) 및 API 중심 아키텍처와의 통합이 어려울 수 있다.
SAML의 실제 활용 사례
- 기업 포털: 직원들이 한 번의 로그인으로 여러 내부 시스템에 접근할 수 있다.
- 클라우드 서비스 액세스: Salesforce, Office 365, Google Workspace 등의 클라우드 서비스에 기업 자격 증명으로 접근한다.
- 대학 시스템: 학생과 교직원이 학교 포털, 도서관 시스템, 학습 관리 시스템 등에 단일 로그인으로 접근한다.
- 정부 시스템: 공무원들이 여러 정부 시스템에 안전하게 접근한다.
- 의료 정보 시스템: 의료진이 다양한 의료 애플리케이션에 단일 인증으로 접근한다.
SAML 구현의 모범 사례
- 암호화 사용: 민감한 사용자 정보가 포함된 어설션은 암호화해야 한다.
- 서명 검증: 모든 SAML 메시지와 어설션의 서명을 반드시 검증해야 한다.
- 적절한 타임아웃 설정: 어설션의 유효 기간을 적절히 설정하여 재생 공격을 방지한다.
- 메타데이터 교환 자동화: IdP와 SP 간의 메타데이터 교환을 자동화하여 오류를 줄인다.
- SSL/TLS 사용: 모든 SAML 통신은 SSL/TLS를 통해 이루어져야 한다.
- 속성 매핑 표준화: IdP와 SP 간의 사용자 속성 매핑을 명확히 정의한다.
- 로깅 및 모니터링: 인증 이벤트를 철저히 로깅하고 모니터링한다.
용어 정리
용어 | 설명 |
---|---|