WCF(Windows Communication Foundation)에는 구성할 수 있지만 WCF에서 지원하는 모든 보안 옵션을 구성할 때 완전한 유연성을 제공하지 않는 여러 시스템 제공 바인딩이 포함되어 있습니다. 이 항목에서는 개별 바인딩 요소에서 직접 사용자 지정 바인딩을 만드는 방법을 보여 줍니다. 이러한 바인딩을 만들 때 지정할 수 있는 보안 설정 중 일부를 강조 표시합니다. 사용자 지정 바인딩을 만드는 방법에 대한 자세한 내용은 바인딩 확장을 참조하세요.
경고
SecurityBindingElement는 TransferMode가 Buffered로 설정될 때 TCP 전송에서 사용하는 기본 채널 형태인 IDuplexSessionChannel 채널 형태를 지원하지 않습니다. SecurityBindingElement를 이 시나리오에서 사용하려면 TransferMode을 Streamed로 설정해야 합니다.
사용자 지정 바인딩 만들기
WCF에서 모든 바인딩은 바인딩 요소로 구성됩니다. 각 바인딩 요소는 클래스에서 BindingElement 파생됩니다. 표준 시스템 제공 바인딩의 경우 일부 속성 설정을 사용자 지정할 수 있지만 바인딩 요소가 만들어지고 구성됩니다.
반면, 사용자 지정 바인딩을 만들기 위해 바인딩 요소가 만들어지고 구성되고 CustomBinding 바인딩 요소에서 생성됩니다.
이렇게 하려면 클래스의 BindingElementCollection 인스턴스가 나타내는 컬렉션에 개별 바인딩 요소를 추가한 다음 해당 개체와 같은 속성을 Elements 설정합니다CustomBinding. 트랜잭션 흐름, 신뢰할 수 있는 세션, 보안, 복합 이중, 단방향, 스트림 보안, 메시지 인코딩 및 전송 순서로 바인딩 요소를 추가해야 합니다. 나열된 모든 바인딩 요소가 모든 바인딩에 필요한 것은 아닙니다.
보안바인딩요소
세 가지 바인딩 요소는 모두 SecurityBindingElement 클래스에서 파생되며, 메시지 수준 보안과 관련이 있습니다. 세 가지는 TransportSecurityBindingElement, SymmetricSecurityBindingElement및 AsymmetricSecurityBindingElement. TransportSecurityBindingElement는 혼합 모드 보안을 제공하는 데 사용됩니다. 메시지 계층이 보안을 제공하는 경우 다른 두 요소가 사용됩니다.
추가 클래스는 전송 수준 보안이 제공될 때 사용됩니다.
필수 바인딩 요소
바인딩으로 결합할 수 있는 가능한 바인딩 요소가 많이 있습니다. 이러한 조합이 모두 유효하지는 않습니다. 이 섹션에서는 보안 바인딩에 있어야 하는 필수 요소에 대해 설명합니다.
유효한 보안 바인딩은 다음을 비롯한 여러 요인에 따라 달라집니다.
보안 모드입니다.
전송 프로토콜
계약에 지정된 MEP(메시지 교환 패턴)입니다.
다음 표에서는 이전 요소의 각 조합에 대한 유효한 바인딩 요소 스택 구성을 보여 줍니다. 이는 최소한의 요구 사항입니다. 메시지 인코딩 바인딩 요소, 트랜잭션 바인딩 요소 및 기타 바인딩 요소와 같은 바인딩에 추가 바인딩 요소를 추가할 수 있습니다.
| 보안 모드 | Transport | 계약 메시지 교환 패턴 | 계약 메시지 교환 패턴 | 계약 메시지 교환 패턴 |
|---|---|---|---|---|
Datagram |
Request Reply |
Duplex |
||
| Transport | Https | |||
| OneWayBindingElement | ||||
| HttpsTransportBindingElement | HttpsTransportBindingElement | |||
| TCP | ||||
| OneWayBindingElement | ||||
| SSL 또는 Windows StreamSecurityBindingElement | SSL 또는 Windows StreamSecurityBindingElement(스트림 보안 바인딩 엘리먼트) | SSL 또는 Windows 스트림 보안 바인딩 요소 | ||
| TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
| Message | HTTP | SymmetricSecurityBindingElement(대칭 보안 바인딩 요소) | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement(인증 모드 = SecureConversation) |
| CompositeDuplexBindingElement | ||||
| OneWayBindingElement (단방향 바인딩 요소) | OneWayBindingElement | |||
| HttpTransportBindingElement | HttpTransportBindingElement | HttpTransportBindingElement | ||
| TCP | SecurityBindingElement | 보안바인딩요소 (SecurityBindingElement) | SymmetricSecurityBindingElement(인증 모드 = SecureConversation) | |
| TcpTransportBindingElement | TcpTransportBindingElement (TCP 전송 바인딩 요소) | 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 |
SecurityBindingElements에는 많은 구성 가능한 설정이 있습니다. 자세한 내용은 SecurityBindingElement 인증 모드를 참조하세요.
자세한 내용은 보안 대화 및 보안 세션을 참조하세요.
Procedures
SymmetricSecurityBindingElement를 사용하는 사용자 지정 바인딩을 만들려면
이름을 BindingElementCollection사용하여 클래스의
outputBec인스턴스를 만듭니다.클래스의 인스턴스를 반환하는 정적 메서드
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)를 호출합니다 SymmetricSecurityBindingElement .Collection<T> 클래스의
Add메서드를 호출하여 BindingElement의 SymmetricSecurityBindingElement를 컬렉션(outputBec)에 추가합니다.클래스의 인스턴스를 TextMessageEncodingBindingElement 만들고 컬렉션(
outputBec)에 추가합니다. 바인딩에서 사용하는 인코딩을 지정합니다.HttpTransportBindingElement를 생성하고 컬렉션(
outputBec)에 추가합니다. 이렇게 하면 바인딩이 HTTP 전송을 사용하게 지정됩니다.클래스의 CustomBinding 인스턴스를 만들고 생성자에 컬렉션을
outputBec전달하여 새 사용자 지정 바인딩을 만듭니다.결과 사용자 지정 바인딩은 표준 WSHttpBinding과 동일한 많은 특성을 공유합니다. 메시지 수준 보안 및 Windows 자격 증명을 지정하지만 보안 세션을 사용하지 않도록 설정하고 서비스 자격 증명을 대역 외로 지정해야 하며 서명을 암호화하지 않습니다. 마지막은 4단계와 같이 속성을 설정 MessageProtectionOrder 해야만 제어할 수 있습니다. 다른 두 가지는 표준 바인딩의 설정을 사용하여 제어할 수 있습니다.
예시
설명
다음 예제에서는 SymmetricSecurityBindingElement을(를) 사용하는 사용자 지정 바인딩을 만드는 전체 함수를 제공합니다.
코드
// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);
Public Shared Function CreateCustomBinding() As Binding
' Create an empty Custom Binding to populate,
Dim binding As New CustomBinding()
' Create a SymmetricSecurityBindingElement.
Dim ssbe As SymmetricSecurityBindingElement
ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe)
binding.Elements.Add(New TextMessageEncodingBindingElement())
binding.Elements.Add(New HttpTransportBindingElement())
Return New CustomBinding(binding)
End Function