Share via


방법: 보안 모드 설정

WCF(Windows Communication Foundation) 보안에는 대부분의 미리 정의된 바인딩에서 볼 수 있는 세 가지 공통 보안 모드인 전송, 메시지 및 "메시지 자격 증명이 있는 전송"이 있습니다. 두 가지 추가 모드는 BasicHttpBinding에 있는 "transport-credential only" 모드와 NetMsmqBinding에 있는 "Both" 모드라는 두 가지 바인딩에만 해당됩니다. 그러나 이 항목에서는 세 가지 일반 보안 모드(Transport, Message, TransportWithMessageCredential)에 대해 중점적으로 설명합니다.

모든 미리 정의된 바인딩이 이러한 모드를 모두 지원하는 것은 아닙니다. 이 항목에서는 WSHttpBindingNetTcpBinding 클래스를 사용하여 모드를 설정하고 프로그래밍 방식과 구성을 통한 모드 설정 방법에 대해 설명합니다.

자세한 내용은 WCF 보안, 보안 개요, 보안 서비스서비스 및 클라이언트 보안을 참조하세요. 전송 모드 및 메시지에 대한 자세한 내용은 전송 보안메시지 보안을 참조하세요.

코드에서 보안 모드를 설정하려면

  1. 사용 중인 바인딩 클래스의 인스턴스를 만듭니다. 사전 정의된 바인딩 목록은 시스템 제공 바인딩을 참조하세요. 이 예제에서는 WSHttpBinding 클래스의 인스턴스를 만듭니다.

  2. Mode 속성에서 반환하는 개체의 Security 속성을 설정합니다.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    

    또는 다음 코드에 표시된 것처럼 모드를 메시지로 설정합니다.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    

    또는 다음 코드에 표시된 것처럼 모드를 메시지 자격 증명을 사용한 전송으로 설정합니다.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
  3. 다음 코드에 표시된 것처럼 바인딩의 생성자에서 모드를 설정할 수도 있습니다.

    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    
    Dim b As New WSHttpBinding(SecurityMode.Message)
    

ClientCredentialType 속성 설정

모드를 세 값 중 하나로 설정하면 ClientCredentialType 속성을 설정하는 방법이 결정됩니다. 예를 들어, WSHttpBinding 클래스를 사용하여 모드를 Transport로 설정할 경우 ClientCredentialType 클래스의 HttpTransportSecurity 속성을 적절한 값으로 설정해야 합니다.

전송 모드에 대해 ClientCredentialType 속성을 설정하려면

  1. 바인딩의 인스턴스를 만듭니다.

  2. Mode 속성을 Transport로 설정합니다.

  3. ClientCredential 속성을 적절한 값으로 설정합니다. 다음 코드에서는 속성을 Windows로 설정합니다.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    

메시지 모드에 대해 ClientCredentialType 속성을 설정하려면

  1. 바인딩의 인스턴스를 만듭니다.

  2. Mode 속성을 Message로 설정합니다.

  3. ClientCredential 속성을 적절한 값으로 설정합니다. 다음 코드에서는 속성을 Certificate로 설정합니다.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    

구성에서 모드 및 ClientCredentialType 속성을 설정하려면

  1. 구성 파일의 <bindings> 요소에 적절한 바인딩 요소를 추가합니다. 다음 예에서는 <wsHttpBinding> 요소를 추가합니다.

  2. <binding> 요소를 추가하고 name 특성을 적절한 값으로 설정합니다.

  3. <security> 요소를 추가하고 mode 특성을 Message, Transport 또는 TransportWithMessageCredential로 설정합니다.

  4. 모드를 Transport로 설정한 경우 <transport> 요소를 추가하고 clientCredential 특성을 적절한 값으로 설정합니다.

    다음 예제에서는 모드를 "Transport"로 설정한 다음 clientCredentialType 요소의 <transport> 특성을 "Windows"로 설정합니다.

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" >
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    또는 security mode를 "Message"로 설정한 다음 <"message"> 요소를 설정합니다. 이 예제에서는 clientCredentialType을 "Certificate"로 설정합니다.

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" >
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    TransportWithMessageCredential 값은 특별한 경우에 사용되며 이에 대해서는 아래에 설명되어 있습니다.

TransportWithMessageCredential 사용

보안 모드를 TransportWithMessageCredential로 설정하면 전송에서 전송 수준 보안을 제공하는 실제 메커니즘을 결정합니다. 예를 들어, HTTP 프로토콜에서는 HTTP를 통한 SSL(Secure Sockets Layer)(HTTPS)을 사용합니다. 따라서 전송 보안 개체(예: ClientCredentialType)의 HttpTransportSecurity 속성 설정은 무시됩니다. 즉, 메시지 보안 개체(ClientCredentialType 바인딩의 경우 WSHttpBinding 개체)의 NonDualMessageSecurityOverHttp만 설정할 수 있습니다.

자세한 내용은 방법: 전송 보안 및 메시지 자격 증명 사용을 참조하세요.

참고 항목