보안 아키텍처
이 단원에서는 WCF(Windows Communication Foundation) 보안 구성 요소의 기능을 수정하거나 확장하는 데 사용할 수 있는 다양한 확장성 지점에 대해 설명합니다. 이러한 확장성 지점에 대해 이해하려면 전반적인 WCF 보안 아키텍처를 잘 알고 있어야 합니다. 이 항목에서는 WCF 보안 아키텍처의 구성 요소 및 구성 요소의 관계를 중심으로 보안 아키텍처를 설명하며, 이 단원의 뒷부분에서는 확장성 지점을 전체 아키텍처 모델에 맞추는 방법에 대해 설명합니다.
WCF 보안 구성 요소의 범위
WCF 보안은 WCF 아키텍처의 여러 구성 요소에 걸쳐 적용됩니다. WCF 보안의 주요 목적은 WCF 프레임워크에 구축된 응용 프로그램을 위해 무결성, 기밀성, 인증, 권한 부여 및 감사 기능을 제공하는 것입니다. WCF 아키텍처에서는 이러한 기능이 다음 영역으로 나뉩니다.
- 전송 보안 - 메시지 기밀성, 데이터 무결성 및 통신 상대방에 대한 인증 기능을 제공합니다.
- 권한 부여 - 권한 부여 결정을 위한 프레임워크를 제공합니다.
- 감사 - 감사 로그에 보안 관련 이벤트를 기록합니다.
보안 모드 및 이 문서의 범위
전송 보안은 다음과 같은 보안 모드 중 하나를 사용하여 수행할 수 있습니다.
- Transport 세 가지 통신 보안 기능 모두 클라이언트와 서비스 사이의 메시지 전송에 사용되는 전송에 의해 제공됩니다.
- Message 전송 보안이 SOAP 메시지 수준에서만 제공됩니다. 즉, 보안이 XML 수준의 SOAP 메시지에 직접 적용됩니다.
- Transport with Message Credential 전송 보안이 전송 및 메시지 계층 모두에서 수행됩니다. 전송 계층에서는 통신 기밀성, 데이터 무결성 및 서비스 인증 기능이 제공되며, 메시지 계층에서는 클라이언트 인증 기능이 제공됩니다.
이 문서의 나머지 부분에서는 Message 보안 모드를 중점적으로 설명하며, 그 중 일부 내용은 Transport with Message Credential 모드에도 적용할 수 있습니다. 특히 클라이언트 인증에 적용되는 이 문서의 일부 내용은 Transport with Message Credential 모드에도 적용할 수 있는데, 이는 Transport with Message Credential 모드가 Message 모드와 같은 방식으로 메시지 계층을 사용해 클라이언트 인증을 수행하기 때문입니다.
권한 부여 및 감사 구성 요소에 대한 내용은 세 가지 보안 모드 모두에 같은 방식으로 적용됩니다. 따라서 이러한 구성 요소와 관련된 이 문서의 모든 내용은 지원되는 모든 보안 모드에 적용됩니다.
Message 보안 모드 개념
WS-Security 모델
Message 보안 모드는 WS-Security 사양을 기반으로 합니다. WS-Security 사양은 SOAP 메시지에 보안을 적용하는 데 사용할 수 있는 프레임워크를 정의합니다. 즉, SOAP 메시지 보호 및 인증을 위해 디지털 서명과 암호화가 사용된 보안 토큰을 사용하여 메시지 보안 모델을 지정합니다. 사양은 WS-Security(웹 서비스 보안)(영문 페이지일 수 있음)를 참조하십시오.
용어
보안 토큰은 클레임을 어설션하며, 인증 비밀 또는 키와 보안 ID 사이의 바인딩을 어설션하는 데 사용됩니다.
클레임이란 하나의 엔터티가 이름, ID, 그룹, 키, 또는 권한 등의 엔터티에 대해 만든 선언입니다. 클레임을 만드는 엔터티를 클레임 발급자라고 하며, 클레임이 만들어지는 엔터티를 클레임 주체라고 합니다.
클레임 발급자는 보안 토큰을 서명하거나 암호화하기 위해 해당 보안 토큰의 키를 사용하여 보안 토큰을 보증하거나 승인할 수 있습니다. 이렇게 하면 보안 토큰의 클레임을 인증할 수 있습니다.
메시지 서명은 메시지 원본 및 무결성을 확인하는 데 사용됩니다. 또한 메시지 서명은 메시지 생산자가 주로 타사의 키 인식을 나타내는 데 사용되며, 보안 토큰의 클레임을 확인하여 클레임의 ID 및 보안 토큰이 나타내는 다른 클레임을 메시지에 바인딩하는 데 사용됩니다.
보안 토큰
WS-Security는 여러 형식의 보안 토큰을 정의하며 추가적인 보안 토큰 형식을 독립적으로 정의할 수 있도록 확장 가능한 모델을 제공합니다. 모든 토큰 형식 정의에는 토큰에 대한 XML serialization이 포함되어 있으므로 토큰 표현을 메시지에 직접 추가할 수 있습니다.
WS-Security에서 정의되는 일부 보안 토큰 형식은 다음과 같습니다.
- 사용자 이름 토큰
- X.509 인증서 토큰
- Kerberos 토큰
- SAML 토큰
토큰을 사용하는 방법에는 4가지가 있으며 지정된 메시지에 연결된 토큰은 이러한 범주 중 하나에 속합니다.
- SignedSupporting
- SignedEndorsing
- SignedEncrypted
- EncryptedEndorsing
.NET Framework 3.0에서는 클라이언트 메시지에 지정된 형식의 토큰은 하나만 포함할 수 있지만 다른 형식의 토큰은 여러 개 포함할 수 있습니다.
.NET Framework 3.5에서는 클라이언트 메시지에 지정된 형식의 토큰을 여러 개 포함할 수 있을 뿐만 아니라 다양한 형식의 토큰도 포함할 수 있습니다.
이 기능을 통해 다음을 포함한 다양한 시나리오를 수행할 수 있습니다.
- 증분 클레임 전송. 서비스의 모든 작업에 클레임 집합이 있어야 하며 일부 작업의 경우 추가 클레임이 필요할 수 있습니다. 각 작업에 대해 별도로 발급된 토큰을 사용하는 대신 클라이언트는 초기 클레임 집합과 함께 발급된 토큰을 하나 가져올 수 있으며 호출할 작업에 필요한 나머지 클레임과 함께 발급된 다른 토큰을 사용할 수 있습니다.
- 다단계 인증. 작업 수행이 허용되기 전에 클라이언트가 여러 발급자로부터 발급된 토큰 또는 여러 클래임 집합과 함께 발급된 토큰을 수집해야 하는 경우입니다. WCF에서는 발급된 토큰을 토큰 형식의 하나로 간주하기 때문에 이 시나리오의 경우 메시지에는 지원하는 발급된 토큰이 두 개 있어야 합니다.
서비스는 이러한 방식으로 구성할 수 없습니다. 서비스는 지원하는 토큰을 하나만 포함할 수 있습니다.
자세한 내용은 방법: 동일한 형식의 여러 보안 토큰 사용을 참조하십시오.
WS-Security 구현
WS-Security는 메시지 보안의 기초가 되므로 WCF의 WS-Security 구현은 전체 Message 보안 모드의 기반이 됩니다. Message 보안 모드 기능을 확장하려면 WS-Security 구현의 작동 방식을 이해해야 합니다.
WCF의 WS-Security 구현은 다음 작업을 처리합니다.
- 보안 토큰과 SOAP 메시지 사이의 serialization
- 보안 토큰 인증
- 메시지 서명의 적용 및 유효성 확인
- SOAP 메시지 암호화 및 해독
처음 두 항목은 WCF 확장성 지점을 통해 사용자 지정할 수 있습니다. 기존 보안 토큰의 serialization 또는 해당 토큰에 대한 WCF 보안의 인증 방법을 변경할 수 있습니다. 또한 serialization 및 인증 기능을 비롯하여 완전히 새로운 보안 토큰 형식을 WCF 보안에 도입할 수도 있습니다.
이 단원의 다음 항목에서는 WS-Security 구현 확장성 지점을 사용해 보안 토큰 기능을 사용자 지정하는 방법에 대해 설명합니다.
권한 부여
보안 토큰은 들어오는 메시지에서 deserialize되고 인증됩니다. 인증 프로세스를 수행하면 권한 부여 정책 개체 집합이 만들어집니다. 이러한 각 개체는 보안 토큰의 데이터를 나타나며 권한 부여 단계에서 사용됩니다.
권한 부여 정책에서는 지정된 보안 토큰에 표시되는 클레임 집합을 만듭니다. 이 클레임 집합은 권한 부여 결정을 위해 ServiceAuthorizationManager 및 AuthorizationContext 속성 내의 논리에 제공됩니다.
ID
클레임 이외에 WCF에서는 IIdentity 인터페이스를 구현하여,
.NET Framework 보안 모델을 사용하여 만든 기존 인프라에 대한 호출자를 나타냅니다. 이 IIdentity 인스턴스는 보안 토큰이 Windows 계정에 매핑되는 경우에는 호출자의 Windows ID를 나타내며 그렇지 않으면 호출자 이름이 들어 있는 기본 ID를 나타냅니다. 이러한 ID는 ServiceSecurityContext를 사용해 액세스할 수도 있습니다. 자세한 내용은 방법: 보안 컨텍스트 검사를 참조하십시오. 다음 방법 중 하나를 사용하여 WCF에서 ID를 만드는 방법을 사용자 지정할 수 있습니다.
- SecurityTokenAuthenticator 클래스에 대한 사용자 지정 확장을 구현합니다.
- MembershipProvider 클래스를 확장하거나 사용자 지정 IAuthorizationPolicy 구현을 만든 후 이를 ServiceAuthorizationManager에 연결하여 ASP.NET과 통합합니다.
- 사용자 지정 IAuthorizationPolicy를 만듭니다.
사용자 지정 멤버 자격 공급자는 사용자 이름/암호 인증을 사용해 호출자를 인증할 경우에만 사용할 수 있습니다. MembershipProvider는
사용자 이름/암호 쌍의 유효성을 검사합니다. MembershipProvider의 유효성을 검사한 후 해당 쌍이 올바른 경우 WCF에서는 인증할 호출자를 나타내는 기본 ID를 만듭니다.
기존 .NET Framework 보안 인프라와 손쉽게 통합하기 위해 WCF에서는 기본적으로 CurrentPrincipal 속성을 호출자를 나타내는 IPrincipal 인스턴스로 설정합니다. IPrincipal 인스턴스는 생성된 IIdentity의 정보를 바탕으로 만들어집니다.
IIdentity는 ASP.NET RoleProvider와 통합하여 더욱 확대할 수 있습니다. RoleProvider는 호출자가 속한 역할 집합을 추가합니다. 권한 부여 논리에서는 이러한 정보를 사용하여 액세스를 결정합니다.
ID에 대한 자세한 내용은 서비스 ID 및 인증을 참조하십시오.
보안 메시지 보내기
다음 그림에서는 메시지 보안 모드를 사용할 때 클라이언트에서 메시지를 보안 처리하는 방법을 보여 줍니다. 또한 해당 구성 요소와 이들의 관계를 보여 줍니다.
- 응용 프로그램 코드가 실행되어 메시지가 생성됩니다.
- 토큰 제공 단계에서 X.509 인증서 등의 클라이언트 자격 증명이 연결됩니다. 페더레이션 시나리오에서는 토큰 발급자와 연결해 자격 증명을 제공합니다.
- 자격 증명은 보안 토큰을 만드는 데 사용됩니다.
- 토큰 인증 단계에서 토큰을 확인합니다.
- 마지막으로 보안 토큰이 serialize되고 보내집니다.
보안 메시지 받기
다음 그림에서는 보안 메시지가 네트워크에서 추출되어 받는 쪽에서 확인되는 경우 발생하는 프로세스를 보여 줍니다.
- 보안 토큰이 토큰 인증 단계에서 deserialize되고 처리됩니다. 이 때 필요에 따라 ASP.NET 멤버 자격 공급자를 사용해 사용자 이름 및 암호를 제공할 수 있습니다.
- 인증 후에는 권한 부여 정책이 추출됩니다.
- 권한 부여 정책 평가 단계에서는 권한 부여 정책이 평가되어 클레임이 평가 컨텍스트에 추가됩니다. 이때 외부 권한 부여 정책을 사용할 수도 있습니다. 이 단계 및 다음 단계는 ServiceAuthorizationManager의 메서드로 수행합니다.
- 서비스 인증 단계에서는 권한 부여 정책에 의해 추가된 클레임에 따라 올바른 권한 부여가 제공됩니다. 이 단계는 ServiceAuthorizationManager의 메서드로 수행합니다.
- 권한 부여 후에는 호출자가 호출자 가장을 허용하고 서비스 메서드에서 이를 요청한 경우 또는 ImpersonateCallerForAllOperations 속성이 서비스 권한 부여 동작으로 설정된 경우 호출자 가장이 발생합니다. 자세한 내용은 WCF를 통한 위임 및 가장을 참조하십시오.
- 이 때 WCF에서는 자격 증명을 사용하여 PrincipalPermission을 생성합니다. 필요에 따라 ASP.NET 역할 공급자를 사용할 수도 있습니다.
- 응용 프로그램 코드가 실행됩니다.
보안 확장성 지점 개요
다음 그림에서는 WCF 보안 구성 요소에서 제공하는 확장성 지점을 보여 줍니다. 이 그림은 메시지를 처리하는 동안 확장성 지점에 도달하는 시기에 따라 4개의 범주로 나뉘어 있습니다. 해당 범주는 앞의 두 단원에서 설명한 대로 메시지 보안 처리 단계에 매핑됩니다. WCF 보안과 통합할 수 있는 기존 인프라 기술에 대해서도 보여 줍니다.
참고 항목
참조
PrincipalPermission
ServiceAuthorizationManager
ServiceSecurityContext
개념
Windows Communication Foundation 아키텍처
WCF를 통한 위임 및 가장