바인딩 및 보안
WCF(Windows Communication Foundation)에 포함된 시스템 제공 바인딩은 WCF 응용 프로그램을 신속하게 프로그래밍하기 위한 방법을 제공합니다. 한 가지 예외를 통해 모든 바인딩의 기본 보안 스키마가 활성화됩니다. 이 항목은 보안 요구 사항에 적합한 바인딩을 선택하는 데 도움을 줍니다.
WCF 보안 개요에 대한 내용은 보안 개요를 참조하십시오. 바인딩을 사용하여 WCF 프로그래밍에 대한 자세한 내용은 WCF 보안 프로그래밍을 참조하십시오.
이미 바인딩을 선택한 경우 WCF의 보안 동작에서 보안과 관련된 런타임 동작에 대한 자세한 내용을 찾을 수 있습니다.
일부 보안 기능은 시스템 제공 바인딩을 사용하여 프로그래밍할 수 없습니다. 사용자 지정 바인딩 사용을 보다 자세히 제어하려면 사용자 지정 바인딩을 사용하는 보안 기능을 참조하십시오.
바인딩의 보안 기능
WCF에는 대부분의 요구 사항을 충족하는 여러 시스템 제공 바인딩이 포함되어 있습니다. 또한 특정 바인딩이 요구 사항을 충족하지 않는 경우, 사용자 지정 바인딩을 만들 수도 있습니다. 시스템 제공 바인딩 목록에 대한 내용은 시스템 제공 바인딩을 참조하십시오. 사용자 지정 바인딩에 대한 자세한 내용은 사용자 지정 바인딩을 참조하십시오.
WCF의 모든 바인딩에는 두 가지 양식 즉, 구성 파일에서 사용되는 XML 요소 및 API가 있습니다. 예를 들어 WSHttpBinding(API)은 wsHttpBinding Element에 상응하는 항목이 있습니다.
다음 단원에서는 각 바인딩에 대한 두 가지 양식을 나열하고 해당 보안 기능에 대해 요약하여 설명합니다.
BasicHttp
코드에서는 BasicHttpBinding 클래스를 사용하고 구성에서는 basicHttpBinding Element를 사용합니다.
이 바인딩은 다음을 포함하여 일정 범위의 기존 기술을 사용하도록 디자인되었습니다.
- ASP.NET 웹 서비스(ASMX), 버전 1
- WSE(Web Service Enhancement) 응용 프로그램
- WS-I(Web Services Interoperability) 사양에 정의된 기본 프로필(https://go.microsoft.com/fwlink/?LinkId=38955)
- WS-I에 정의된 기본 보안 프로필
기본적으로 이 바인딩은 보안 처리되어 있지 않습니다. ASMX 서비스와 상호 운용되도록 디자인되었습니다. 보안을 사용하는 경우 바인딩은 기본 인증, 다이제스트 및 통합 Windows 보안과 같이 IIS(인터넷 정보 서비스) 보안 메커니즘과 원활한 상호 운용을 위해 디자인됩니다. 자세한 내용은 전송 보안 개요를 참조하십시오. 이 바인딩은 다음을 지원합니다.
- HTTPS 전송 보안.
- HTTP 기본 인증.
- WS-Security.
자세한 내용은 BasicHttpSecurity, BasicHttpMessageSecurity, BasicHttpMessageCredentialType 및 BasicHttpSecurityMode를 참조하십시오.
WSHttpBinding
코드에서는 WSHttpBinding 클래스를 사용하고 구성에서는 wsHttpBinding Element를 사용합니다.
기본적으로 이 바인딩은 WS-Security 사양을 구현하고 WS-* 사양을 구현하는 서비스와의 상호 운용성을 제공합니다. 다음을 지원합니다.
- HTTPS 전송 보안.
- WS-Security.
- 호출자를 인증하기 위한 SOAP 메시지 자격 증명 보안을 사용하여 HTTPS 전송 보호.
자세한 내용은 WSHttpSecurity, MessageSecurityOverHttp, MessageCredentialType, SecurityMode, HttpTransportSecurity, HttpClientCredentialType 및 HttpProxyCredentialType을 참조하십시오.
WSDualHttpBinding
코드에서는 WSDualHttpBinding 클래스를 사용하고 구성에서는 wsDualHttpBinding Element를 사용합니다.
이 바인딩은 이중 서비스 응용 프로그램을 사용하도록 디자인되었습니다. 이 바인딩은 메시지 기반 전송 보안을 위한 WS-Security 사양을 구현합니다. 전송 보안을 사용할 수 없습니다. 기본적으로 다음 기능을 제공합니다.
- 안정성을 위해 WS-Reliable Messaging을 구현합니다.
- 전송 보안 및 인증을 위해 WS-Security를 구현합니다.
- 메시지 배달을 위해 HTTP를 사용합니다.
- 텍스트/XML 메시지 인코딩을 사용합니다.
WS-Security(메시지 계층 보안)를 사용하면 바인딩을 통해 다음 매개 변수를 구성할 수 있습니다.
- 암호화 알고리즘을 결정하기 위한 보안 알고리즘 모음.
- 다음에 대한 바인딩 옵션.
- 클라이언트에서 서비스 자격 증명 사용 가능한 out-of-band를 제공하는 경우.
- 채널 설정의 일부로 서비스에서 협상된 서비스 자격 증명을 제공하는 경우.
자세한 내용은 WSDualHttpSecurity 및 WSDualHttpSecurityMode를 참조하십시오.
NetTcpBinding
코드에서는 NetTcpBinding 클래스를 사용하고 구성에서는 netTcpBinding Element를 사용합니다.
이 바인딩은 시스템 간 통신을 위해 최적화됩니다. 기본적으로 다음과 같은 특성이 있습니다.
- 전송 계층 보안을 구현합니다.
- 전송 보안 및 인증을 위해 Windows 보안을 사용합니다.
- 전송을 위해 TCP를 사용합니다.
- 이진 메시지 인코딩을 구현합니다.
- WS-Reliable Messaging을 구현합니다.
다음과 같은 옵션을 사용할 수 있습니다.
- 메시지 계층 보안(WS-Security 사용).
- 메시지 자격 증명을 통한 전송 보안—TCP를 통한 TLS(전송 계층 보안)에 의해 제공되는 기밀성과 무결성 및 WS-Security에 의해 제공되는 권한에 대한 자격 증명.
자세한 내용은 NetTcpSecurity, TcpTransportSecurity, TcpClientCredentialType, MessageSecurityOverTcp 및 MessageCredentialType을 참조하십시오.
NetNamedPipeBinding
코드에서는 NetNamedPipeBinding 클래스를 사용하고 구성에서는 netNamedPipeBinding Element를 사용합니다.
이 바인딩은 일반적으로 동일한 시스템에서의 프로세스 간 통신을 위해 최적화됩니다. 기본적으로 이 바인딩에는 다음과 같은 특성이 있습니다.
- 메시지 전송 및 인증을 위해 전송 보안을 사용합니다.
- 메시지 배달을 위해 명명된 파이프를 사용합니다.
- 이진 메시지 인코딩을 구현합니다.
- 암호화 및 메시지 서명.
다음과 같은 옵션을 사용할 수 있습니다.
- Windows 보안을 사용하여 인증.
자세한 내용은 NetNamedPipeSecurity, NetNamedPipeSecurityMode 및 NamedPipeTransportSecurity를 참조하십시오.
MsmqIntegrationBinding
코드에서는 MsmqIntegrationBinding 클래스를 사용하고 구성에서는 msmqIntegrationBinding element를 사용합니다.
이 바인딩은 비WCF MSMQ(Microsoft Message Queuing) 끝점과 상호 운용되는 WCF 클라이언트 및 서비스를 만들기 위해 최적화됩니다.
기본적으로 이 바인딩은 전송 보안을 사용하고 다음과 같은 보안 특성을 제공합니다.
- 보안을 사용할 수 없습니다(None).
- MSMQ 전송 보안입니다(Transport).
자세한 내용은 NetMsmqSecurity 및 NetMsmqSecurityMode를 참조하십시오.
NetMsmqBinding
코드에서는 NetMsmqBinding 클래스를 사용하고 구성에서는 netMsmqBinding Element를 사용합니다.
이 바인딩은 MSMQ 대기 중인 메시지 지원이 필요한 WCF 서비스를 만들 때 사용합니다.
기본적으로 이 바인딩은 전송 보안을 사용하고 다음과 같은 보안 특성을 제공합니다.
- 보안을 사용할 수 없습니다(None).
- MSMQ 전송 보안입니다(Transport).
- SOAP 기반 메시지 보안입니다(Message).
- 동시 전송 및 메시지 보안입니다(Both).
- 지원되는 클라이언트 자격 증명 형식: None, Windows, UserName, Certificate, IssuedToken
Certificate 자격 증명은 보안 모드를 Both 또는 Message 중 하나로 설정하는 경우에만 지원됩니다.
자세한 내용은 MessageSecurityOverMsmq 및 MsmqTransportSecurity를 참조하십시오.
WSFederationHttpBinding
코드에서는 WSFederationHttpBinding 클래스를 사용하고 구성에서는 WSFederationHttpBinding element를 사용합니다.
기본적으로 이 바인딩은 WS-Security(메시지 계층 보안)를 사용합니다.
자세한 내용은 페더레이션, WSFederationHttpSecurity 및 WSFederationHttpSecurityMode를 참조하십시오.
사용자 지정 바인딩
시스템 제공 바인딩이 요구 사항을 충족하지 못하는 경우, 사용자 지정 보안 바인딩 요소를 사용하여 사용자 지정 바인딩을 만들 수 있습니다. 자세한 내용은 사용자 지정 바인딩을 사용하는 보안 기능을 참조하십시오.
바인딩 선택
다음 표에서는 보안 모드 설정에서 제공하는 기능에 대해 요약하여 설명합니다. 즉, 보안 모드를 Transport, Message 또는 TransportWithMessageCredential로 설정한 경우 사용할 수 있는 기능을 보여 줍니다. 이 표를 사용하면 응용 프로그램에서 필요한 보안 기능을 찾는 데 도움을 줍니다.
설정 | 기능 |
---|---|
Transport |
서버 인증 클라이언트 인증 지점 간 보안 상호 운용성 하드웨어 가속 높은 처리량 보안 방화벽 대기 시간이 긴 응용 프로그램 여러 홉을 통해 다시 암호화 |
Message |
서버 인증 클라이언트 인증 종단 간 보안 상호 운용성 다양한 클레임 페더레이션 다단계 인증 사용자 지정 토큰 공증/타임스탬프 서비스 대기 시간이 긴 응용 프로그램 메시지 서명 지속성 |
TransportWithMessageCredential |
서버 인증 클라이언트 인증 지점 간 보안 상호 운용성 하드웨어 가속 높은 처리량 다양한 클라이언트 클레임 페더레이션 다단계 인증 사용자 지정 토큰 보안 방화벽 대기 시간이 긴 응용 프로그램 여러 홉을 통해 다시 암호화 |
다음 표에서는 다양한 모드 설정을 지원하는 바인딩을 보여 줍니다. 표에서 서비스 끝점을 만드는 데 사용할 바인딩을 선택합니다.
바인딩 | Transport 모드 지원 | Message 모드 지원 | TransportWithMessageCredential 지원 |
---|---|---|---|
BasicHttpBinding |
예 |
예 |
예 |
WSHttpBinding |
예 |
예 |
예 |
WSDualHttpBinding |
아니요 |
예 |
아니요 |
NetTcpBinding |
예 |
예 |
예 |
NetNamedPipeBinding |
예 |
아니요 |
아니요 |
NetMsmqBinding |
예 |
예 |
아니요 |
MsmqIntegrationBinding |
예 |
아니요 |
아니요 |
wsFederationHttpBinding |
아니요 |
예 |
예 |
바인딩의 전송 자격 증명
다음 표에서는 전송 보안 모드에서 BasicHttpBinding 또는 WSHttpBinding 사용 시 사용할 수 있는 클라이언트 자격 증명 형식을 보여 줍니다.
형식 | 설명 |
---|---|
None |
클라이언트가 자격 증명을 제공할 필요가 없음을 지정합니다. 익명 클라이언트로 변환됩니다. |
Basic |
기본 인증입니다. 자세한 내용은 https://go.microsoft.com/fwlink/?LinkId=84023(영문 페이지일 수 있음)에서 RFC 2617 – HTTP 인증: 기본 및 다이제스트 인증을 참조하십시오. |
Digest |
다이제스트 인증입니다. 자세한 내용은 https://go.microsoft.com/fwlink/?LinkId=84023(영문 페이지일 수 있음)에서 RFC 2617 – HTTP 인증: 기본 및 다이제스트 인증을 참조하십시오. |
NTLM |
NTLM(NT LAN Manager) 인증입니다. |
Windows |
Windows 인증입니다. |
Certificate |
인증서를 사용하여 수행되는 인증입니다. |
IssuedToken |
이를 사용하는 서비스의 경우 보안 토큰 서비스 또는 CardSpace에서 발급한 토큰을 사용하여 클라이언트를 인증해야 합니다. 자세한 내용은 페더레이션 및 발급된 토큰을 참조하십시오. |
바인딩의 메시지 클라이언트 자격 증명
다음 표에서는 메시지 보안 모드에서 바인딩 사용 시 사용할 수 있는 클라이언트 자격 증명 형식을 보여 줍니다.
형식 | 설명 |
---|---|
None |
서비스와 익명 클라이언트가 상호 작용할 수 있습니다. |
Windows |
Windows 자격 증명의 인증된 컨텍스트에서 SOAP 메시지 교환을 수행할 수 있습니다. |
UserName |
서비스에서 사용자 이름 자격 증명을 사용하여 클라이언트를 인증하도록 요구할 수 있습니다. 보안 모드를 TransportWithMessageCredential로 설정할 경우 WCF는 암호 다이제스트를 보내거나 암호를 사용하여 키를 파생하고 메시지 모드 보안에 이러한 키를 사용하는 것을 지원하지 않습니다. 따라서 WCF에서는 사용자 이름 자격 증명을 사용할 때 전송에 보안을 적용합니다. |
Certificate |
서비스에서 인증서를 사용하여 클라이언트를 인증하도록 요구할 수 있습니다. |
IssuedToken |
서비스가 보안 토큰 서비스를 사용하여 사용자 지정 토큰을 제공할 수 있습니다. |