방법: SecurityBindingElement를 사용하여 사용자 지정 바인딩 만들기
WCF(Windows Communication Foundation)에는 구성할 수 있지만 WCF에서 지원하는 모든 보안 옵션을 구성할 때 완벽한 유연성을 제공하지는 않는 여러 시스템 제공 바인딩이 포함되어 있습니다. 이 항목에서는 개별 바인딩 요소에서 직접 사용자 지정 바인딩을 만드는 방법에 대해 설명하고, 이와 같은 바인딩을 만들 때 지정할 수 있는 일부 보안 설정에 대해 강조합니다. 사용자 지정 바인딩 만들기에 대한 자세한 내용은 바인딩 확장을 참조하십시오.
사용자 지정 바인딩 만들기
WCF에서는 모든 바인딩이 바인딩 요소로 구성됩니다. 각 바인딩 요소는 BindingElement 클래스에서 파생됩니다. 표준 시스템 제공 바인딩의 경우 바인딩 요소가 자동으로 생성되어 구성되지만 일부 속성 설정을 사용자 지정할 수 있습니다.
이와 달리 사용자 지정 바인딩을 만들려면 바인딩 요소를 만들어 구성하고 바인딩 요소에서 CustomBinding을 만들어야 합니다.
이렇게 하려면 BindingElementCollection 클래스 인스턴스로 표시되는 컬렉션에 개별 바인딩 요소를 추가한 다음 CustomBinding의 Elements 속성을 해당 개체와 같게 만듭니다. 바인딩 요소는 Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding, Transport 순으로 추가해야 합니다. 나열된 모든 바인딩 요소가 모든 바인딩에서 필요한 것은 아닙니다.
SecurityBindingElement
세 가지 바인딩 요소가 메시지 수준 보안과 관련이 있으며 이러한 요소는 모두 SecurityBindingElement 클래스에서 파생됩니다. 이 세 가지는 TransportSecurityBindingElement, SymmetricSecurityBindingElement 및 AsymmetricSecurityBindingElement입니다. TransportSecurityBindingElement는 혼합 모드 보안을 제공하는 데 사용됩니다. 다른 두 가지 요소는 메시지 계층이 보안을 제공할 때 사용합니다.
전송 수준 보안이 제공될 경우 다음과 같은 추가 클래스가 사용됩니다.
필요한 바인딩 요소
바인딩에 결합하여 사용할 수 있는 바인딩 요소는 많습니다. 그러나 이러한 조합이 모두 올바른 것은 아닙니다. 이 단원에서는 보안 바인딩에 있어야 하는 필수 요소에 대해 설명합니다.
올바른 보안 바인딩은 다음을 비롯한 많은 요인에 의해 결정됩니다.
- 보안 모드
- 전송 프로토콜
- 계약에 지정된 MEP(메시지 교환 패턴)
다음 표에서는 위 요인의 조합별로 올바른 바인딩 요소 스택 구성을 보여 줍니다. 이는 최소 요구 사항입니다. 메시지 인코딩 바인딩 요소, 트랜잭션 바인딩 요소 및 기타 바인딩 요소와 같은 추가 바인딩 요소를 바인딩에 추가할 수 있습니다.
보안 모드 | 전송 | 계약 메시지 교환 패턴 | ||||
---|---|---|---|---|---|---|
|
|
데이터그램 |
요청 회신 |
이중 |
||
전송 |
Https |
|||||
|
|
OneWayBindingElement |
||||
|
|
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|||
|
TCP |
|||||
|
|
OneWayBindingElement |
||||
|
|
SSL 또는 Windows StreamSecurityBindingElement |
SSL 또는 Windows StreamSecurityBindingElement |
SSL 또는 Windows StreamSecurityBindingElement |
||
|
|
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||
메시지 |
Http |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement(인증 모드 = SecureConversation) |
||
|
|
|
|
CompositeDuplexBindingElement |
||
|
|
OneWayBindingElement |
|
OneWayBindingElement |
||
|
|
HttpTransportBindingElement |
HttpTransportBindingElement |
HttpTransportBindingElement |
||
|
Tcp |
SecurityBindingElement |
SecurityBindingElement |
SymmetricSecurityBindingElement(인증 모드 = SecureConversation) |
||
|
|
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||
혼합(메시지 자격 증명을 사용한 전송) |
Https |
TransportSecurityBindingElement |
TransportSecurityBindingElement |
|
||
|
|
OneWayBindingElement |
|
|
||
|
|
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|
||
|
TCP |
TransportSecurityBindingElement |
SymmetricSecurityBindingElement(인증 모드 = SecureConversation) |
SymmetricSecurityBindingElement(인증 모드 = SecureConversation) |
||
|
|
OneWayBindingElement |
||||
|
|
SSL 또는 Windows StreamSecurityBindingElement |
SSL 또는 Windows StreamSecurityBindingElement |
SSL 또는 Windows StreamSecurityBindingElement |
||
|
|
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
SecurityBindingElement에는 구성 가능한 설정이 많이 있습니다. 자세한 내용은 SecurityBindingElement 인증 모드를 참조하십시오.
자세한 내용은 보안 대화 및 보안 세션을 참조하십시오.
절차
SymmetricSecurityBindingElement를 사용하여 사용자 지정 바인딩을 만들려면
이름이
outputBec
인 BindingElementCollection 클래스의 인스턴스를 만듭니다.SymmetricSecurityBindingElement 클래스의 인스턴스를 반환하는 정적 메서드 **M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)**를 호출합니다.
BindingElement 클래스의 Collection에서 Add 메서드를 호출하여 SymmetricSecurityBindingElement를 컬렉션(
outputBec
)에 추가합니다.TextMessageEncodingBindingElement 클래스의 인스턴스를 만들고 이를 컬렉션(
outputBec
)에 추가합니다. 이를 통해 바인딩에서 사용하는 인코딩이 지정됩니다.HttpTransportBindingElement를 만들고 이를 컬렉션(
outputBec
)에 추가합니다. 이를 통해 바인딩이 HTTP 전송을 사용하도록 지정됩니다.CustomBinding 클래스의 인스턴스를 만들고
outputBec
컬렉션을 생성자에게 전달함으로써 새 사용자 지정 바인딩을 만듭니다.결과 사용자 지정 바인딩은 표준 WSHttpBinding과 동일한 특징을 많이 공유합니다. 메시지 수준 보안 및 Windows 자격 증명을 지정하지만 보안 세션은 사용하지 않도록 설정하고, 서비스 자격 증명은 대역 외로 지정되어야 하며, 서명을 암호화하지 않습니다. 마지막 항목은 4단계에서처럼 MessageProtectionOrder 속성의 설정을 통해서만 제어할 수 있습니다. 다른 두 가지는 표준 바인딩의 설정을 사용하여 제어할 수 있습니다.
예제
설명
다음 예제에서는 SymmetricSecurityBindingElement를 사용하는 사용자 지정 바인딩을 만들기 위한 완전한 함수를 제공합니다.
코드
참고 항목
참조
SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding