SAML
1. 개요
1. 개요
SAML은 인터넷 상에서 인증과 권한 부여 정보를 교환하기 위한 XML 기반의 개방형 표준 데이터 포맷이다. 주로 웹 브라우저 싱글 사인온 환경에서 사용자의 신원 정보를 안전하게 전달하는 데 사용된다. SAML은 인증 당사자와 신뢰 당사자 간의 신뢰 관계를 바탕으로, 어설션이라는 형태로 보안 정보를 교환한다.
이 표준은 OASIS 컨소시엄의 보안 서비스 기술 위원회에 의해 개발 및 유지 관리된다. SAML은 엔터프라이즈 환경에서 여러 애플리케이션 간의 통합 로그인을 구현하는 사실상의 표준으로 자리 잡았다. 클라우드 컴퓨팅과 서비스형 소프트웨어의 확산과 함께 그 중요성이 더욱 커졌다.
SAML의 핵심 가치는 중앙 집중식 인증을 가능하게 한다는 점이다. 사용자는 한 번의 로그인으로 SAML을 지원하는 여러 서비스에 접근할 수 있다. 이는 사용자 편의성을 높이고, 조직의 자격 증명 관리 비용을 절감하며, 보안 정책을 일관되게 적용할 수 있게 한다.
2. SAML의 역사와 표준화
2. SAML의 역사와 표준화
SAML은 2001년 OASIS 보안 서비스 기술 위원회(SSTC)에서 작업을 시작하여 2002년 11월 SAML 1.0이 표준으로 승인되었다. 초기 버전은 인터넷 상의 SSO 문제를 해결하기 위해 XML 기반의 인증 및 인가 데이터 교환 프레임워크를 정의했다.
SAML 1.1은 2003년 9월에 발표되어 1.0의 몇 가지 제한 사항을 개선했다. 그러나 SAML의 광범위한 채용과 업계 수용을 이끈 결정적인 버전은 2005년 3월 OASIS 표준이 된 SAML 2.0이었다. SAML 2.0은 SAML 1.1, Liberty Alliance의 ID-FF 1.2, Shibboleth 프로젝트의 인증 아키텍처를 통합하는 주요 통합 작업의 결과물이다. 이 통합은 서로 경쟁하던 여러 인터넷 SSO 표준을 하나의 강력한 표준으로 수렴시켰다.
SAML 표준화는 OASIS 내에서 지속적으로 유지 관리되고 있다. SAML 2.0 이후에도 보안 고려사항 명세서 업데이트, 메타데이터 프로파일 추가 등 지속적인 개선 작업이 이루어지고 있다. 이 표준은 ISO와 ITU-T와 같은 국제 표준화 기구에서도 채택되었다[1]. SAML의 발전은 웹 서비스 보안과 페더레이션 아이덴티티 관리의 성장과 궤를 같이한다.
3. 핵심 구성 요소와 개념
3. 핵심 구성 요소와 개념
SAML의 핵심 구성 요소와 개념은 신원 관리와 연합 인증의 기본 구조를 정의합니다. 이는 주로 세 가지 주요 역할, 세 가지 기본 구성 요소, 그리고 시스템 간의 신뢰를 설정하는 메커니즘으로 구성됩니다.
주요 역할에는 주체, 신뢰 당사자, 인증 당사자가 있습니다. 주체는 서비스를 이용하려는 최종 사용자 또는 시스템입니다. 신뢰 당사자는 사용자가 접근하려는 애플리케이션이나 웹 서비스로, 인증을 외부에 위임합니다. 인증 당사자는 사용자의 신원을 확인하고 인증 정보를 발행하는 권한을 가진 서버입니다. 이 세 가지 역할의 상호작용이 SAML 기반 단일 사인온의 기초를 이룹니다.
SAML의 세 가지 기본 구성 요소는 어설션, 프로토콜, 바인딩입니다. 어설션은 인증 당사자가 발행하는 신원 및 권한에 대한 정보를 담은 XML 문서입니다. 프로토콜은 어설션을 요청하고 전달하기 위한 표준화된 메시지 교환 규칙을 정의합니다. 바인딩은 이러한 SAML 메시지를 HTTP, SOAP 등의 하위 통신 프로토콜에 매핑하는 방법을 규정합니다.
시스템 간의 신뢰 관계 설정에는 SAML 메타데이터가 핵심 역할을 합니다. 메타데이터는 인증 당사자나 신뢰 당사자의 엔드포인트 URL, 공개 키, 지원하는 바인딩과 프로토콜 등의 기술적 구성 정보를 XML 형식으로 담고 있습니다. 상호 교환된 메타데이터를 통해 양측은 서로를 신뢰할 수 있는 당사자로 식별하고 안전하게 통신할 수 있습니다.
3.1. 주체, 신뢰 당사자, 인증 당사자
3.1. 주체, 신뢰 당사자, 인증 당사자
주체는 SAML 교환에서 인증 정보의 대상이 되는 사용자 또는 시스템을 가리킨다. 주체는 일반적으로 최종 사용자이지만, 서비스나 장치일 수도 있다. SAML 어설션은 이 주체에 대한 정보를 담고 있으며, 인증 당사자가 이를 생성하고 신뢰 당사자가 이를 신뢰하여 접근을 허용한다.
신뢰 당사자는 주체가 제공한 자격 증명을 직접 처리하지 않고, 제3의 인증 당사자로부터 받은 어설션을 신뢰하는 서비스 제공자를 의미한다. 주로 사용자가 접근하려는 애플리케이션이나 웹 서비스가 이 역할을 담당한다. 신뢰 당사자는 인증 당사자와 사전에 신뢰 관계를 구축하고, 수신한 어설션이 유효한지 검증한 후 주체에게 서비스를 제공한다.
인증 당사자는 주체의 신원을 확인하고 이를 증명하는 SAML 어설션을 생성하는 주체이다. 일반적으로 ID 공급자라고 불리는 중앙 집중식 인증 서버가 이 역할을 수행한다. 인증 당사자는 주체의 인증 정보(예: 사용자명과 비밀번호)를 검증하고, 그 결과와 추가 속성(예: 역할, 이메일)을 담은 어설션에 서명하여 신뢰 당사자에게 전달한다.
이 세 구성 요소의 관계는 다음과 같이 정리할 수 있다.
역할 | 설명 | 일반적인 예 |
|---|---|---|
주체 | 인증 정보의 소유자 | 기업의 직원, 외부 고객 |
신뢰 당사자 | 어설션을 신뢰하고 서비스를 제공하는 당사자 | SaaS 애플리케이션, 내부 포털 |
인증 당사자 | 주체를 인증하고 어설션을 발행하는 당사자 | Active Directory 연동 서버, 클라우드 IDP |
이 구조를 통해 애플리케이션(신뢰 당사자)은 복잡한 인증 로직을 구현할 필요 없이, 전문 인증 서비스(인증 당사자)가 제공한 신원 정보를 신뢰하고 활용할 수 있다. 이는 싱글 사인온 구현의 기초가 된다.
3.2. 어설션, 프로토콜, 바인딩
3.2. 어설션, 프로토콜, 바인딩
어설션은 SAML의 핵심 데이터 객체로, 한 당사자가 다른 당사자에 대해 만든 보안에 관한 진술을 담고 있다. 주로 인증 당사자가 생성하며, 특정 주체가 언제, 어떻게 인증되었는지, 어떤 속성을 가지고 있는지, 어떤 리소스에 접근할 권한이 있는지에 대한 정보를 포함한다. 어설션은 XML 형식으로 표현되며, 서명되어 무결성과 발행자를 보증받는다.
SAML 프로토콜은 당사자 간에 어설션을 요청하고 전달하기 위해 정의된 표준화된 메시지 교환 규칙이다. 주요 프로토콜로는 인증 요청 프로토콜, 어설션 쿼리/응답 프로토콜, 단일 로그아웃 프로토콜 등이 있다. 예를 들어, 신뢰 당사자는 인증 요청 프로토콜을 사용해 인증 당사자에게 사용자 인증을 요청하고, 인증 당사자는 응답 프로토콜을 통해 어설션을 포함한 응답을 반환한다.
바인딩은 추상적인 SAML 프로토콜 메시지를 실제 전송 프로토콜 상에서 어떻게 포장하고 전송할지 정의하는 매핑 규칙이다. 다양한 상황에 맞게 여러 바인딩이 표준화되어 있다.
바인딩 이름 | 설명 | 일반적인 사용처 |
|---|---|---|
HTTP 리다이렉트 바인딩 | SAML 메시지를 URL 쿼리 문자열에 첨부하여 HTTP 리다이렉트로 전송한다. | 간단한 인증 요청 전송에 사용된다. |
HTTP POST 바인딩 | SAML 메시지를 HTML 폼의 숨겨진 필드에 넣어 브라우저를 통해 POST로 전송한다. | |
HTTP 아티팩트 바인딩 | 실제 메시지 대신 짧은 참조 코드(아티팩트)를 전송하고, 백채널 연결을 통해 메시지를 조회한다. | 보안 강화가 필요하거나 메시지 크기가 큰 경우에 사용된다. |
SOAP 바인딩 | SAML 메시지를 SOAP 엔벨로프에 넣어 웹 서비스 호출로 전송한다. | 서버 대 서버 통신이나 어설션 쿼리에 사용된다. |
프로토콜이 '무엇을' 교환할지 정의한다면, 바인딩은 '어떻게' 교환할지를 결정한다. 적절한 바인딩 선택은 보안, 상호운용성, 배포 환경에 중요한 영향을 미친다.
3.3. 메타데이터
3.3. 메타데이터
SAML 메타데이터는 신뢰 당사자(SP)와 인증 당사자(IdP)가 서로를 안전하게 식별하고 통신하는 데 필요한 기술 구성 정보를 포함하는 XML 문서이다. 이는 사전에 구성 정보를 교환함으로써 수동 설정을 줄이고, 파트너십 구축을 자동화하는 데 핵심적인 역할을 한다.
메타데이터 문서에는 일반적으로 엔터티 ID, 사용 가능한 엔드포인트 URL(예: 단일 로그온(SSO) 서비스, 단일 로그아웃 서비스), 지원하는 바인딩 유형(예: HTTP POST, HTTP 리디렉션), 그리고 공개 인증서 정보가 포함된다. 공개 인증서는 메시지 서명 검증이나 암호화에 사용된다. 표준화된 형식을 통해 상호 운용성이 보장되며, 시스템은 상대방의 메타데이터를 구독하거나 정기적으로 갱신하여 구성 변경 사항을 자동으로 반영할 수 있다.
메타데이터의 신뢰성과 무결성을 보장하기 위해, 문서 자체에 디지털 서명을 적용하는 것이 일반적이다. 수신 측은 알려진 서명 인증서를 사용하여 메타데이터의 출처와 변조 여부를 검증한다. 배포 방식은 정적 파일을 웹 서버에 호스팅하거나, 메타데이터 교환 프로토콜을 통해 동적으로 제공하는 등 다양하다.
포함 정보 | 설명 | 예시 |
|---|---|---|
EntityID | SP 또는 IdP의 고유 식별자 |
|
SSO 엔드포인트 | 인증 요청을 처리하는 URL |
|
공개 인증서 | 서명 검증 또는 암호화에 사용 |
|
지원하는 NameID 형식 | 주체 식별자의 형식 |
|
4. SAML 워크플로우
4. SAML 워크플로우
SAML 워크플로우는 신뢰 당사자(SP)와 인증 당사자(IdP) 간의 신뢰 관계를 바탕으로 사용자 인증 정보를 교환하는 과정을 정의한다. 주로 웹 브라우저를 매개로 한 리다이렉트 방식을 사용하며, 크게 SP 시작 로그인과 IdP 시작 로그인 두 가지 패턴으로 구분된다.
SP 시작 로그인(Service Provider Initiated SSO)은 사용자가 최초에 서비스 제공자(SP)의 보호된 자원에 접근을 시도할 때 시작된다. 워크플로우는 다음과 같은 단계로 진행된다.
1. 사용자가 SP 웹사이트에 접근한다.
2. SP는 사용자 세션이 없음을 확인하고, 미리 구성된 IdP로 사용자를 리다이렉트한다. 이때, 인증 요청(SAML AuthnRequest)이 함께 전달된다.
3. IdP는 사용자를 자신의 로그인 페이지로 안내하여 자격 증명(예: 아이디/비밀번호)을 입력받는다.
4. IdP는 인증이 성공하면, 사용자 정보와 인증 상태가 포함된 SAML 어설션을 생성하고 서명한 후, SP로 다시 사용자를 리다이렉트한다. 이 응답(SAML Response)은 일반적으로 브라우저를 통해 POST 방식으로 전달된다.
5. SP는 응답을 수신하여 서명을 검증하고 어설션을 파싱한다. 유효성이 확인되면 사용자에게 세션을 생성하고 원래 요청한 자원에 대한 접근을 허용한다.
IdP 시작 로그인(Identity Provider Initiated SSO)은 사용자가 먼저 IdP 포털에 로그인하여, 거기서 제공하는 애플리케이션 목록(어플리케이션 대시보드)에서 특정 SP를 선택하는 방식으로 시작된다. 이 경우 SP로 전송되는 SAML 응답에는 별도의 명시적인 인증 요청(AuthnRequest)이 선행되지 않을 수 있다. 이 방식은 IdP를 중심으로 통합된 포털 환경을 제공할 때 유용하지만, SP 측에서 예상치 못한 어설션을 수신할 수 있어 보안 구성에 주의가 필요하다[2].
두 워크플로우 모두에서 메시지 전송을 위한 구체적인 방법(예: HTTP POST 바인딩, HTTP 리다이렉트 바인딩)과 보안 요구사항(메시지 서명, 어설션 암호화, 재전송 공격 방지를 위한 유일성과 만료 시간 검증)은 SAML 표준에 정의된 바인딩과 프로파일을 따라 구현된다.
4.1. SP 시작 로그인
4.1. SP 시작 로그인
SP 시작 로그인은 사용자가 서비스 제공자(SP)의 웹사이트나 애플리케이션에 접근하려 할 때 시작되는 가장 일반적인 SAML 워크플로우이다. 이 방식은 종종 웹 브라우저 SSO 프로필을 사용한다.
과정은 다음과 같이 진행된다. 먼저, 인증되지 않은 사용자가 SP 보호 리소스에 접근한다. SP는 사용자를 인증하기 위해 신뢰하는 인증 당사자(IdP)로 리디렉션한다. 이때 SP는 <samlp:AuthnRequest> 메시지를 생성하여 사용자 에이전트(보통 웹 브라우저)를 통해 IdP로 전송한다. 이 요청에는 요청 ID, 발행 시각, 어설션 소비 서비스(ACS) URL, SP의 식별자 등이 포함된다. IdP는 사용자를 인증한 후(예: 아이디/비밀번호 입력), <samlp:Response> 메시지를 생성한다. 이 응답에는 사용자의 신원과 인증 상태를 담은 SAML 어설션이 포함되며, SP의 ACS URL로 다시 사용자 에이전트를 통해 전송된다. SP는 응답을 검증하고 어설션을 파싱하여 사용자 세션을 생성한 후, 원래 요청한 보호 리소스에 대한 접근을 허용한다.
이 워크플로우의 주요 특징은 인증 요청이 SP에서 시작된다는 점이다. SP는 IdP의 메타데이터를 미리 알고 있어야 하며, 요청과 응답은 종종 HTTP 리디렉션 바인딩 또는 HTTP POST 바인딩을 통해 전송된다. 보안을 위해 메시지는 XML 서명으로 보호되며, 재전송 공격을 방지하기 위해 요청 ID와 응답의 InResponseTo 속성이 매칭되어 검증된다.
4.2. IdP 시작 로그인
4.2. IdP 시작 로그인
IdP 시작 로그인은 사용자가 인증 당사자에서 직접 세션을 시작하는 방식이다. 이 접근법은 포털이나 대시보드와 같은 중앙 집중식 서비스에서 흔히 사용되며, 사용자는 먼저 IdP에 로그인한 후 접근 가능한 애플리케이션 목록에서 특정 신뢰 당사자를 선택하여 접근한다.
워크플로우는 다음과 같다. 사용자가 IdP에 성공적으로 인증되면, IdP는 사용자에게 사전에 구성된 신뢰 당사자 애플리케이션 목록을 표시한다. 사용자가 특정 SP를 선택하면, IdP는 해당 SP에 대한 SAML 어설션을 생성한다. 그런 다음 IdP는 사용자의 브라우저를 SP의 어설션 소비 서비스 엔드포인트로 리디렉션하며, 이 요청에는 SAML 응답(보통 SAMLResponse 매개변수에 포함됨)이 전달된다. SP는 이 어설션을 검증하고, 유효하면 사용자를 위한 로컬 세션을 생성하여 애플리케이션에 대한 접근을 허용한다.
이 방식의 주요 장점은 사용자 경험의 단순화와 IdP의 중앙 집중식 관리에 있다. 사용자는 최초 인증 후 여러 애플리케이션에 원클릭으로 접근할 수 있으며, IdP에서 세션을 종료하면 연관된 모든 SP의 접근이 일괄적으로 차단될 수 있다. 그러나 이 방식은 SP 측에서 사전에 사용자 계정이 프로비저닝되어 있어야 정상적으로 작동한다는 점에 유의해야 한다.
5. SAML 어설션 구조
5. SAML 어설션 구조
SAML 어설션은 인증 당사자가 생성하고 신뢰 당사자에게 전달하는 보안 토큰이다. 이 어설션은 주체에 대한 정보를 담은 XML 문서이며, 주로 인증 성공 여부, 사용자 속성, 권한 부여 결정을 전달하는 데 사용된다. SAML 어설션은 세 가지 주요 문(Statement) 유형으로 구성된다.
첫 번째는 인증문이다. 이 문은 주체가 특정 시간과 방법으로 인증을 받았음을 선언한다. 인증 방법은 암호, 다중 인증, X.509 인증서 등이 될 수 있으며, 인증 세션의 시작 시간과 만료 시간을 포함한다. 이를 통해 신뢰 당사자는 사용자의 신원이 검증되었음을 신뢰할 수 있다.
두 번째는 속성문이다. 이 문은 주체와 관련된 특성을 이름-값 쌍의 형태로 제공한다. 일반적인 속성에는 이메일 주소, 부서, 역할, 사용자 ID 등이 포함된다. 신뢰 당사자는 이 정보를 기반으로 접근 제어 정책을 적용하거나 애플리케이션 내에서 사용자를 개인화한다.
세 번째는 권한부여결정문이다. 이 문은 주체가 특정 리소스에 대해 수행하려는 행위가 허용되었는지 여부를 나타낸다. 그러나 실제 구현에서는 인증문과 속성문을 기반으로 신뢰 당사자가 별도로 권한을 결정하는 경우가 더 흔하다. 모든 어설션이 이 세 가지 문을 모두 포함해야 하는 것은 아니며, 필요에 따라 하나 이상의 문으로 구성된다.
구성 요소 | 설명 | 포함되는 주요 정보 예시 |
|---|---|---|
인증문 | 주체의 인증 사실을 선언. | 인증 방법, 인증 일시, 세션 정보. |
속성문 | 주체의 특성(속성)을 제공. | 사용자 ID, 이메일, 부서, 역할. |
권한부여결정문 | 특정 리소스에 대한 접근 허용 여부 선언. | 리소스 ID, 행위, 결정 결과(허용/거부). |
어설션의 루트 요소는 <saml:Assertion>이며, 필수적으로 발행자, 발행 일시, 고유 ID를 포함한다. 이 구조는 SAML 2.0 표준에 엄격히 정의되어 있으며, 디지털 서명과 암호화를 통해 무결성과 기밀성을 보장한다.
5.1. 인증문
5.1. 인증문
인증문은 SAML 어설션 내에서 주체의 인증 이벤트에 대한 정보를 담고 있는 명세문이다. 이는 주체가 특정 시간에 특정 수단을 통해 어떻게 인증을 받았는지를 기술하며, 신뢰 당사자가 인증 강도와 컨텍스트를 평가하는 데 핵심적인 근거를 제공한다.
인증문은 일반적으로 다음과 같은 주요 요소를 포함한다.
요소 | 설명 |
|---|---|
| 인증이 발생한 정확한 시점(UTC 시간). |
| 인증 당사자가 발급한 특정 인증 세션을 식별하는 선택적 식별자. |
| |
| 인증이 발생한 시스템의 IP 주소나 DNS 이름과 같은 선택적 정보. |
AuthnContext는 특히 중요하며, 인증의 강도를 나타내는 AuthnContextClassRef(예: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport)나 구체적인 인증 방법을 기술하는 AuthnContextDecl을 포함할 수 있다. 이를 통해 신뢰 당사자는 자신의 보안 정책에 부합하는 충분히 강력한 인증이 수행되었는지 판단할 수 있다. 인증문은 단순히 인증 사실을 넘어, 신뢰 당사자가 인증 세션의 유효성을 관리하고 단일 로그아웃과 같은 고급 기능을 지원하는 데도 기여한다.
5.2. 속성문
5.2. 속성문
속성문은 SAML 어설션 내에서 주체에 대한 특정 정보를 전달하는 SAML 구성 요소이다. 인증문이 '누구인가'를 증명하는 반면, 속성문은 '무엇을 가지고 있는가'에 대한 정보, 즉 사용자의 속성을 담는다.
속성문은 하나 이상의 SAML 속성으로 구성된다. 각 속성은 이름(Name)과 하나 이상의 값을 가지며, 일반적으로 LDAP 디렉터리나 데이터베이스에서 가져온 사용자 프로필 데이터를 표현한다. 예를 들어, 사용자의 이메일 주소, 부서, 역할, 그룹 멤버십 등의 정보가 여기에 해당한다. 신뢰 당사자는 이 정보를 기반으로 접근 제어 정책을 적용하거나 애플리케이션 내에서 사용자 인터페이스를 개인화한다.
속성문의 일반적인 구조는 다음과 같다.
구성 요소 | 설명 | 예시 |
|---|---|---|
속성(Attribute) | 속성의 이름을 정의하는 요소. |
|
속성 값(AttributeValue) | 해당 속성의 실제 값을 포함하는 요소. |
|
NameFormat | 속성 이름의 네임스페이스 또는 형식을 지정하는 선택적 한정자. |
|
FriendlyName | 속성 이름에 대한 사람이 읽기 쉬운 별칭을 제공하는 선택적 한정자. |
|
속성문은 인증 당사자가 신뢰 당사자에게 보내는 어설션에 포함되며, 신뢰 당사자는 이를 신뢰하여 사용자 정보의 원천으로 활용한다. 이 과정에서 속성 값의 무결성과 기밀성을 보장하기 위해 어설션 전체 또는 속성문 부분에 대한 디지털 서명과 암호화가 적용될 수 있다.
5.3. 권한부여결정문
5.3. 권한부여결정문
권한부여결정문은 SAML 어설션 내에 포함될 수 있는 세 가지 주요 문 유형 중 하나로, 주체가 특정 리소스에 접근할 권한이 있는지 여부에 대한 결정을 전달합니다. 이는 인증문이 '누구인가'를 확인하고 속성문이 '무엇을 가지고 있는가'를 기술하는 것과 구분되며, '무엇을 할 수 있는가'에 대한 허가 결정을 담당합니다.
이 문은 일반적으로 AuthorizationDecisionStatement 요소로 표현되며, 주체(Subject), 의사결정이 필요한 리소스(Resource), 수행하고자 하는 행위(Action), 그리고 최종 결정(Decision)을 포함합니다. 결정은 일반적으로 "허용(Permit)", "거부(Deny)", "불확실(Indeterminate)" 중 하나의 값으로 표시됩니다. 예를 들어, 특정 사용자가 특정 문서 파일에 대해 "읽기" 행위를 수행할 권한이 있는지를 질의하고 그 결과를 전달하는 데 사용될 수 있습니다.
그러나 실제 SAML 기반 연합 인증 시스템에서 권한부여결정문의 사용은 상대적으로 드물습니다. 이는 권한 부여 결정이 종종 인증 당사자의 영역이 아니라 신뢰 당사자의 애플리케이션 로직 내에서, 속성문을 통해 전달받은 사용자 속성(Attribute)이나 역할(Role) 정보를 기반으로 내부적으로 처리되기 때문입니다. 즉, IdP는 사용자 신원과 속성을 증명하고, SP는 이를 바탕으로 자체 정책에 따라 접근 제어 결정을 내리는 아키텍처가 더 일반적입니다.
따라서 권한부여결정문은 인증과 권한 부여 결정을 모두 중앙의 인증 당사자에서 수행하고 그 결과를 통보해야 하는 특정한 시나리오나, 매우 세분화된 접근 제어 정책이 연합 수준에서 관리되어야 할 경우에 주로 활용됩니다. 대부분의 현대 구현에서는 XACML과 같은 전용 권한 부여 표준이 이 역할을 보다 전문적으로 수행합니다.
6. 보안 고려사항
6. 보안 고려사항
SAML 기반 싱글 사인온은 인증 및 권한 부여 정보를 교환하기 위해 신뢰할 수 있는 당사자 간에 어설션을 전달합니다. 이 과정에서 메시지의 무결성, 기밀성, 진위성을 보장하고 다양한 공격을 방지하는 것이 핵심 보안 요구사항입니다. 주요 위협으로는 메시지 변조, 도청, 재전송 공격 등이 있습니다.
메시지 보호를 위해 SAML은 XML 서명과 XML 암호화를 광범위하게 사용합니다. 인증 당사자가 발행한 어설션은 반드시 서명되어야 하며, 이 서명은 어설션의 발행자와 내용이 위변조되지 않았음을 검증합니다. 민감한 정보를 포함하는 경우, 어설션 전체 또는 특정 속성은 암호화될 수 있습니다. 또한, 신뢰 당사자와 인증 당사자 간의 SAML 프로토콜 메시지(예: 인증 요청 및 응답)도 서명 및 암호화 대상이 될 수 있습니다[3].
재전송 공격을 방지하기 위해 SAML은 여러 메커니즘을 제공합니다. 가장 일반적인 방법은 어설션에 고유한 식별자(ID 속성)와 제한된 유효 기간(NotBefore, NotOnOrAfter 조건)을 부여하는 것입니다. 신뢰 당사자는 어설션을 수신할 때 이 유효 기간을 반드시 검증해야 합니다. 또한, 특정 신뢰 당사자만을 대상으로 하는 어설션임을 명시하기 위해 Audience 제한 조건을 사용할 수 있습니다. 일부 구현에서는 이전에 사용된 어설션의 ID를 캐시하여 재사용을 차단하기도 합니다.
6.1. 서명과 암호화
6.1. 서명과 암호화
SAML 메시지의 무결성과 기밀성을 보장하기 위해 XML 서명과 XML 암호화를 활용합니다. 이는 메시지가 변조되지 않았음을 증명하고, 민감한 정보를 보호하는 데 핵심적인 역할을 합니다.
주요 보안 메커니즘은 다음과 같습니다.
메커니즘 | 적용 대상 | 주요 목적 |
|---|---|---|
서명 | 전체 어설션, 특정 문(Statement), 메타데이터 | 무결성 검증, 인증, 부인 방지 |
암호화 | 어설션 전체, 특정 속성(예: 사용자 식별자) | 기밀성 유지 |
어설션은 발행자(IdP)에 의해 서명되는 것이 일반적입니다. 이 서명을 통해 신뢰 당사자(SP)는 어설션의 출처를 신뢰하고, 전송 중 내용이 변경되지 않았음을 확인할 수 있습니다. 필요에 따라 어설션 내의 특정 속성문만을 별도로 서명하거나 암호화할 수도 있습니다. 암호화는 주로 사용자의 식별 정보나 민감한 속성 값을 보호할 때 사용되며, 어설션 전체를 암호화하여 중간자 공격(MITM)으로부터 보호하기도 합니다.
배포 시에는 메타데이터 교환을 통해 상대방의 공개 키를 사전에 공유합니다. IdP와 SP는 이 공개 키를 사용하여 서명을 검증하거나, 암호화된 내용을 복호화하기 위한 자신의 개인 키를 안전하게 보관합니다. 이러한 서명과 암호화의 조합은 SAML 기반 싱글 사인온(SSO)이 안전하게 이루어질 수 있는 토대를 제공합니다.
6.2. 재전송 공격 방지
6.2. 재전송 공격 방지
재전송 공격은 공격자가 합법적인 사용자로부터 가로챈 SAML 어설션을 나중에 다시 제출하여 인증을 획득하는 공격 방식이다. 이를 방지하기 위해 SAML은 여러 메커니즘을 정의한다.
가장 일반적인 방법은 어설션에 유효 시간 조건을 포함시키는 것이다. NotBefore와 NotOnOrAfter 속성을 사용하여 어설션이 유효한 시간 창을 명확히 정의한다. 신뢰 당사자는 어설션을 수신할 때 반드시 현재 시간이 이 시간 창 내에 있는지 검증해야 한다. 또한, 인증 당사자는 IssueInstant 값을 기록하여 어설션 발급 시간을 명시한다. 너무 오래된 어설션은 재전송 공격일 가능성이 높으므로 거부된다.
일회성 사용을 보장하기 위한 추가 수단으로 어설션 ID의 추적이 있다. 신뢰 당사자는 이미 사용된 어설션 ID를 캐시하거나 데이터베이스에 저장하여, 동일한 ID를 가진 어설션이 다시 제출되면 이를 거부할 수 있다. 이 메커니즘의 효과적인 구현을 위해서는 ID의 고유성과 저장소 관리가 중요하다. 일부 배포에서는 더 강력한 보안을 위해 수신자 제한 조건을 활용하기도 한다. 어설션의 의도된 수신자를 특정하여, 다른 엔터티가 해당 어설션을 사용하는 것을 원천적으로 차단한다.
방지 메커니즘 | 설명 | 검증 주체 |
|---|---|---|
시간 조건 |
| 신뢰 당사자 |
어설션 ID 추적 | 이미 사용된 ID를 저장하여 재사용 방지 | 신뢰 당사자 |
수신자 제한 |
| 신뢰 당사자 |
메시지 유일성 | 프로토콜 메시지에 유일한 ID 부여 및 추적 | 양측 당사자 |
이러한 조치들은 상호 보완적으로 적용되어, 단일 메커니즘의 우회를 방지한다. 예를 들어, 시간 조건 검증과 어설션 ID 추적을 함께 사용하면 보안성이 크게 향상된다. 모든 SAML 구현은 재전송 공격에 대한 방어 수단을 반드시 포함해야 하며, 이는 SAML 프로파일과 바인딩 사양에 명시된 보안 요구사항의 핵심 부분이다.
7. SAML 2.0 주요 개선사항
7. SAML 2.0 주요 개선사항
SAML 2.0은 2005년 3월에 OASIS 표준으로 승인되었으며, 이전 버전인 SAML 1.x에 비해 상당한 기능 확장과 상호운용성 개선을 이루었다. 가장 큰 변화는 Liberty Alliance의 ID-FF(Identity Federation Framework)와 Shibboleth 프로젝트의 인증 아키텍처를 통합한 것이다. 이를 통해 다양한 신원 연합 시나리오를 지원하는 단일한 표준 프레임워크가 마련되었다.
주요 개선사항은 다음과 같다. 첫째, 웹 브라우저 SSO 프로필이 크게 강화되어 SP 시작 로그인과 IdP 시작 로그인을 모두 공식적으로 지원한다. 둘째, 새로운 프로토콜 바인딩으로 HTTP POST 바인딩이 추가되어 보다 안전한 어설션 전송이 가능해졌다. 셋째, 메타데이터 명세가 도입되어 신뢰 당사자와 인증 당사자 간의 구성 정보 교환을 자동화하고 표준화하는 기반을 제공했다.
아키텍처 측면에서는 어설션 유형에 인증문 외에 속성문과 권한부여결정문을 명확히 정의하고, SAML 프로토콜을 통해 이들을 요청하고 응답하는 메시지 흐름을 체계화했다. 또한, 이전 버전의 독립적인 프로파일들을 통합하여 일관된 작동 모델을 제시했다.
개선 영역 | SAML 1.x | SAML 2.0 |
|---|---|---|
표준 통합 | SAML 1.1 단독 | Liberty ID-FF, Shibboleth 통합 |
SSO 프로필 | 기본적인 웹 SSO | 강화된 웹 브라우저 SSO 프로필 (IdP/SP 시작 모두 지원) |
메타데이터 | 비표준 방식 | XML 기반 공식 메타데이터 명세 도입 |
바인딩 | 주로 HTTP 리디렉션 | HTTP POST, HTTP 아티팩트 등 다양한 바인딩 지원 |
어설션 유형 | 비교적 단순 | 인증문, 속성문, 권한부여결정문으로 명확히 구분 |
이러한 개선을 통해 SAML 2.0은 엔터프라이즈 환경과 인터넷 서비스에서 신원 정보와 인증 정보를 교환하는 사실상의 표준 프로토콜로 자리 잡았다. 이는 이후 등장하는 OAuth나 OpenID Connect와 같은 현대 인증 프로토콜에도 영향을 미쳤다.
8. OAuth, OpenID Connect와의 비교
8. OAuth, OpenID Connect와의 비교
SAML, OAuth, OpenID Connect는 모두 웹 기반 인증 및 권한 부여를 위한 표준 프로토콜이지만, 각각 해결하려는 문제와 설계 목적이 다르다.
SAML은 주로 엔터프라이즈 환경에서의 싱글 사인온을 위해 설계되었다. SAML 어설션은 사용자의 신원(인증)과 속성 정보를 포함하는 XML 문서로, 신뢰 당사자 간에 교환된다. 이는 사용자가 한 번 로그인하면 여러 애플리케이션에 접근할 수 있게 하는 페더레이션 신원 관리의 초기 표준이다. 반면, OAuth는 기본적으로 인증이 아닌 권한 부여에 초점을 맞춘다. 제3자 애플리케이션(클라이언트)이 사용자의 리소스(예: 구글 드라이브 파일)에 대한 제한된 접근 권한을 얻을 수 있도록 하는 위임 접근 프레임워크를 제공한다. OAuth 자체는 사용자 신원을 증명하지 않으며, 단지 접근 토큰을 발급한다.
OpenID Connect는 OAuth 2.0 프레임워크 위에 구축된 간단한 인증 레이어다. OAuth가 제공하는 권한 부여 기능에 표준화된 신원 정보(ID 토큰)를 추가하여, 클라이언트가 사용자의 신원을 확인할 수 있게 한다. 따라서 OpenID Connect는 SAML과 유사한 사용자 인증 기능을 제공하지만, 더 현대적인 JSON 및 REST 기반 접근 방식을 사용한다. 주요 차이점을 표로 정리하면 다음과 같다.
특성 | SAML 2.0 | OAuth 2.0 | OpenID Connect |
|---|---|---|---|
주요 목적 | 권한 부여 (API 접근 위임) | 인증 (OAuth 위의 신원 계층) | |
프로토콜 흐름 | 주로 브라우저 POST/리디렉션 바인딩 | 권한 코드, 암시적, 리소스 소유자 비밀번호 자격 증명 등 | OAuth 2.0 흐름을 기반으로 한 인증 확장 |
토큰/메시지 형식 | 일반적으로 불투명한 문자열 또는 JWT (비표준) | ||
사용 사례 | 기업 내부 시스템 SSO, 교육기관(예: Shibboleth) | 소셜 미디어 로그인, 모바일 앱 API 접근 | 소비자 지향 웹/앱 로그인 (구글, 페이스북 로그인) |
요약하면, SAML은 복잡한 엔터프라이즈 시나리오에 강점이 있는 반면, OAuth와 OpenID Connect는 모바일 및 현대적 웹 애플리케이션 개발에 더 적합한 경량화된 접근 방식을 제공한다. OpenID Connect는 종종 SAML의 현대적인 대안으로 간주되지만, 많은 조직에서는 기존 투자를 보호하기 위해 두 표준을 함께 사용하거나 상황에 맞게 선택한다.
9. 구현 및 배포
9. 구현 및 배포
구현 및 배포는 SAML 기반 싱글 사인온 시스템을 실제 환경에 구축하는 과정을 의미한다. 이는 크게 인증 당사자와 신뢰 당사자의 구현으로 나뉜다. 양측 모두 상대방의 메타데이터를 신뢰할 수 있는 소스에서 가져와 구성해야 하며, 어설션의 유효성 검증과 보안 처리를 위한 정책을 설정해야 한다.
인증 당사자 구현에서는 사용자 인증을 수행하고 SAML 어설션을 생성·발급하는 기능을 구축한다. 주요 작업은 신뢰 당사자의 메타데이터를 기반으로 어설션 소비자 서비스 엔드포인트를 등록하고, 발급할 속성을 매핑하며, 디지털 서명에 사용할 인증서를 관리하는 것이다. 또한 SAML 프로토콜 요청을 처리하고 적절한 SAML 바인딩을 통해 응답을 전달하는 로직이 필요하다. 인증 당사자는 종종 아이덴티티 관리 솔루션이나 액티브 디렉토리 페더레이션 서비스와 같은 전문 소프트웨어로 구현된다.
신뢰 당사자 구현은 보호된 애플리케이션 또는 서비스 측에서 이루어진다. 여기서는 인증 당사자의 메타데이터를 가져와 싱글 사인온 URL과 공개 키를 구성한다. 수신된 SAML 응답의 서명을 검증하고, 어설션 내의 조건을 확인하며, 주체 식별자와 속성을 추출하여 애플리케이션 세션을 생성하는 것이 핵심이다. 배포 시 고려해야 할 사항은 다음과 같다.
고려 사항 | 설명 |
|---|---|
메타데이터 교환 | 양측의 엔드포인트, 인증서, 지원 바인딩 등을 포함한 XML 메타데이터를 안전하게 교환하고 정기적으로 갱신해야 한다. |
인증서 관리 | 서명 및 암호화에 사용되는 X.509 인증서의 생명주기(발급, 갱신, 폐기)를 관리해야 한다. |
바인딩 선택 | HTTP 리다이렉트 바인딩, HTTP POST 바인딩, HTTP 아티팩트 바인딩 등 환경에 맞는 전송 방식을 선택한다. |
보안 구성 | 재전송 공격 방지를 위한 어설션 유효기간 검증, 메시지 서명 필수화, 선택적 메시지 암호화 정책을 수립한다. |
성공적인 배포를 위해서는 개발 프레임워크용 SAML 툴킷이나 상용/오픈소스 페더레이션 제품을 활용하는 것이 일반적이다. 또한, 구현 후에는 실제 트래픽 하에서의 상호운용성 테스트와 보안 취약점 점검이 필수적으로 수행되어야 한다.
9.1. 인증 당사자 구현
9.1. 인증 당사자 구현
인증 당사자 구현은 SAML 기반 연합 신원 관리 시스템에서 사용자의 신원을 확인하고 어설션을 생성하는 핵심 서버 측 구성 요소를 구축하는 과정을 의미한다. 일반적으로 인증 당사자는 조직 내부의 사용자 저장소와 통합되어 작동한다.
주요 구현 작업은 사용자 인증 인터페이스 제공, 신뢰 당사자로부터의 인증 요청 처리, 그리고 유효한 SAML 어설션 생성 및 서명으로 구성된다. 구현 시에는 SAML 프로토콜에 정의된 다양한 바인딩을 지원해야 하며, 특히 HTTP POST 바인딩과 HTTP 리다이렉트 바인딩이 널리 사용된다. 또한, 신뢰할 수 있는 신뢰 당사자 목록을 관리하기 위해 SAML 메타데이터를 게시하고 소비하는 기능이 필수적이다.
인증 당사자 소프트웨어는 상용 제품, 오픈 소스 솔루션, 또는 클라우드 기반 IDaaS 형태로 제공된다. 일반적인 구현 옵션은 다음과 같다.
구현 유형 | 주요 예시 | 특징 |
|---|---|---|
독립형 IdP 서버 | Shibboleth IdP, SimpleSAMLphp | 자체 호스팅 가능, 높은 구성 자유도 |
엔터프라이즈 디렉토리 서비스 확장 | Microsoft Active Directory 연동 서비스 | 기존 AD 인프라 통합 |
웹/애플리케이션 서버 모듈 | mod_auth_mellon for Apache | 경량, 특정 웹 서버에 내장 |
클라우드 IDaaS | 관리 부담 감소, 빠른 배포 |
구현 시 고려해야 할 주요 기술 요소는 강력한 암호화를 사용한 어설션 서명, 재전송 공격을 방지하기 위한 AssertionConsumerService URL 검증 및 요청 ID 관리, 그리고 정기적인 메타데이터 갱신 정책 수립이다. 또한, 단일 로그아웃 프로파일을 지원하여 보안성을 높이는 것이 권장된다.
9.2. 신뢰 당사자 구현
9.2. 신뢰 당사자 구현
신뢰 당사자(SP) 구현은 SAML 기반 싱글 사인온 시스템에서 사용자에게 서비스를 제공하는 애플리케이션을 구축하는 과정을 의미한다. 핵심은 인증 당사자(IdP)로부터 전달받은 SAML 어설션을 신뢰하고, 그 안에 포함된 사용자 정보를 기반으로 애플리케이션 내 세션을 생성하는 것이다.
구현의 첫 단계는 메타데이터 교환이다. SP는 자신의 엔드포인트 URL, 공개 서명 인증서 등을 담은 메타데이터를 생성하여 IdP에 제공하고, 동시에 IdP의 메타데이터를 받아 신뢰할 수 있는 파트너로 등록해야 한다. 이후 SAML 워크플로우에 따라 인증 요청을 생성하고, IdP로부터의 응답을 처리하는 로직을 구현한다. 이 과정에는 SAML 프로토콜 메시지의 생성, 전송, 파싱 및 검증이 포함된다.
보안 구성은 구현의 필수 요소이다. SP는 수신하는 모든 어설션에 대해 다음 사항을 반드시 검증해야 한다.
검증 항목 | 설명 |
|---|---|
발행자(Issuer) | 어설션을 발행한 IdP가 신뢰하는 파트너 목록에 있는지 확인한다. |
디지털 서명 | 어설션의 디지털 서명이 IdP의 공개 키로 검증되는지 확인한다. |
대상자(Audience) | 어설션의 대상 수신자(Audience) 값이 자신의 SP 엔티티 ID와 일치하는지 확인한다. |
시간 조건 | 어설션의 유효 기간(NotBefore, NotOnOrAfter)이 현재 시간을 포함하는지 확인한다. |
재전송 방지 | 동일한 어설션 ID를 가진 메시지의 재전송을 방지하기 위해, ID를 캐시하거나 기록한다. |
마지막으로, 검증된 어설션에서 사용자 식별자(네임ID)나 속성문을 추출하여 애플리케이션의 내부 사용자 객체에 매핑하고 세션을 시작한다. 많은 웹 애플리케이션 프레임워크와 클라우드 서비스는 SAML SP 기능을 위한 공식 라이브러리나 플러그인을 제공하여 구현 부담을 줄여준다.
