다음을 통해 공유


방법: 클라이언트 자격 증명 값 지정

WCF(Windows Communication Foundation)를 사용하여 클라이언트가 서비스를 인증하는 방법을 지정할 수 있습니다. 예를 들면 클라이언트가 인증서를 사용하여 서비스를 인증하도록 규정할 수 있습니다. 이 예제에서는 보안 모드를 Transport로 설정하고 클라이언트 자격 증명 형식을 Certificate로 설정합니다.

이 프로세스는 다음 세 부분에서 발생합니다.

  1. 서비스 개발자는 클라이언트가 제공해야 하는 자격 증명 형식을 지정합니다.
  2. 클라이언트 개발자는 ServiceModel Metadata Utility Tool (Svcutil.exe)를 사용하여 해당 메타데이터(서비스 클라이언트 코드 및 구성 파일)에 대해 서비스를 쿼리합니다.
  3. 클라이언트 개발자는 클라이언트 응용 프로그램을 만들고 코드 또는 구성에 메타데이터에 규정된 대로 자격 증명 형식과 일치하는 자격 증명 값을 제공합니다.

서비스 코드

코드에 서비스에 대한 클라이언트 자격 증명 형식을 지정하려면

  1. 코드에 대한 다음 참조를 추가합니다.

  2. 바인딩의 인스턴스를 만듭니다. 이 예제에서는 NetTcpBinding을 사용합니다.

  3. 보안 모드를 적절히 설정합니다. 이 예제에서는 모드를 Transport로 설정합니다.

  4. ClientCredentialType을 자격 증명으로 적절하게 설정합니다. 이 예제에서는 형식을 인증서로 설정합니다.

  5. 생성자에 서비스 유형을 사용하여 ServiceHost의 인스턴스를 만듭니다. 편의상 서비스 인터페이스와 해당 구현을 표시할 코드는 여기에 표시되지 않습니다.

  6. 서비스에 대한 자격 증명 값을 설정합니다. 이 예제에서는 X509CertificateRecipientServiceCredential 클래스의 SetCertificate 메서드를 사용합니다.

구성에 서비스에 대한 클라이언트 자격 증명 형식을 지정하려면

  1. <bindings> 요소에 적절한 바인딩을 추가합니다. 이 예제에서는 <netTcpBinding Element>를 사용합니다.

  2. <security> of <netTcpBinding>을 바인딩에 추가합니다. 필수 name 특성을 적절한 값으로 설정해야 합니다.

  3. mode 특성을 적절한 값으로 설정합니다. 이 예제에서는 "Message" 모드를 사용합니다.

  4. 전송 또는 메시지 요소를 적절히 보안 바인딩에 추가합니다. 이 예제에서는 <message> element of <netTcpBinding>를 사용합니다.

  5. clientCredential 특성을 원하는 자격 증명 형식으로 설정합니다. 이 예제에서는 "Certificate"를 사용합니다.

    <bindings>
      <netTcpBinding>
        <binding name="TcpBindingWithCredential">
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    
  6. 끝점 요소를 만들 때 bindingConfiguration 특성 값을 사용하여 다음 코드에서처럼 바인딩 구성을 지정합니다.

    <endpoint address="myEndpointAddress"
              binding="netTcpBinding"
              bindingConfiguration="TcpBindingWithCredential"
                 name="netTcpBinding_ICalculator"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
    

클라이언트 코드

다음 절차에서는 코드와 구성에 클라이언트에 대한 클라이언트 자격 증명 값을 설정하는 방법을 보여 줍니다. 이때 ServiceModel Metadata Utility Tool (Svcutil.exe)를 사용하여 서비스에서 메타데이터(코드 및 구성)를 반환했다고 가정합니다. 자세한 내용은 방법: Windows Communication Foundation 클라이언트 만들기를 참조하십시오.

코드에 클라이언트에 대한 클라이언트 자격 증명 값을 지정하려면

  1. ServiceModel Metadata Utility Tool (Svcutil.exe)를 사용하여 서비스에서 코드 및 구성을 생성합니다.

  2. 생성된 코드를 사용하여 WCF 클라이언트의 인스턴스를 만듭니다.

  3. 클라이언트 클래스에서 ClientBase 클래스의 ClientCredentials 속성을 적절한 값으로 설정합니다. 이 예제에서는 X509CertificateInitiatorClientCredential 클래스의 SetCertificate 메서드를 사용하여 속성을 X.509 인증서로 설정합니다.

    X509FindType 클래스의 열거를 사용할 수 있습니다. 주체 이름은 만료 날짜로 인해 인증서가 변경된 경우 여기서 사용됩니다. 주체 이름을 사용하면 인프라에서 인증서를 다시 찾을 수 있습니다.

구성에 클라이언트에 대한 클라이언트 자격 증명 값을 지정하려면

  1. <behavior> of <endpointBehaviors> 요소를 <behaviors> 요소에 추가합니다.

  2. <serviceCredentials> 요소를 <behaviors> 요소에 추가합니다. 필수 name 특성을 적절한 값으로 설정해야 합니다.

  3. <clientCertificate> of <serviceCredentials> 요소를 <clientCredentials> 요소에 추가합니다.

  4. 다음 코드에서처럼 storeLocation, storeName, x509FindTypefindValue 특성을 적절한 값으로 설정합니다. 인증서에 대한 자세한 내용은 인증서 작업을 참조하십시오.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredential">
            <clientCredentials>
              <clientCertificate findValue="Contoso.com" 
                                 storeLocation="LocalMachine"
                                 storeName="TrustedPeople"
                                 x509FindType="FindBySubjectName" />
            </clientCredentials>
          </behavior>
       </endpointBehaviors>
    </behaviors>
    
  5. 클라이언트를 구성할 때 다음 코드에서처럼 <endpoint> 요소의 behaviorConfiguration 특성을 설정하여 동작을 지정합니다. 끝점 요소는 <client> 요소의 자식입니다. 또한 bindingConfiguration 특성을 클라이언트에 대한 바인딩으로 설정하여 바인딩 구성 이름을 지정합니다. 생성된 구성 파일을 사용하는 경우 바인딩의 이름이 자동으로 생성됩니다. 이 예제에서 이름은 "tcpBindingWithCredential"입니다.

    <client>
      <endpoint name =""
                address="net.tcp://contoso.com:8036/aloha"
                binding="netTcpBinding"
                bindingConfiguration="tcpBindingWithCredential"
                behaviorConfiguration="credentialBehavior" />
    </client>
    

참고 항목

작업

방법: Windows Communication Foundation 클라이언트 만들기

참조

NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential

개념

WCF 보안 프로그래밍
자격 증명 형식 선택
인증서 작업

기타 리소스

ServiceModel Metadata Utility Tool (Svcutil.exe)
<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>