다음을 통해 공유


방법: 사용자 지정 클라이언트 및 서비스 자격 증명 만들기

이 항목에서는 사용자 지정 클라이언트와 서비스 자격 증명을 구현하는 방법 및 응용 프로그램 코드로부터 사용자 지정 자격 증명을 사용하는 방법을 보여 줍니다.

자격 증명 확장성 클래스

ClientCredentialsServiceCredentials 클래스는 WCF(Windows Communication Foundation) 보안 확장성에 대한 주요 진입점입니다. 이러한 자격 증명 클래스는 API를 제공합니다. 이 API를 통해 응용 프로그램 코드에서는 자격 증명 정보를 설정하고, 자격 증명 형식을 보안 토큰으로 변환할 수 있습니다. ((보안 토큰은 SOAP 메시지 내부에서 자격 증명 정보를 전송하는 데 사용하는 형식입니다.) 이러한 자격 증명 클래스의 책임은 다음과 같은 두 가지 영역으로 나눠 볼 수 있습니다.

  • 응용 프로그램에서 자격 증명 정보를 설정하도록 API 제공
  • SecurityTokenManager 구현을 위한 팩터리 역할 수행

ClientCredentialsServiceCredentials 클래스는 모두 SecurityTokenManager 반환에 대한 계약을 정의하는 추상 SecurityCredentialsManager 클래스로부터 상속됩니다.

자격 증명 클래스 및 이 클래스가 WCF 보안 아키텍처에 속하는 방법에 대한 자세한 내용은 보안 아키텍처를 참조하십시오.

WCF에서 제공되는 기본 구현은 시스템 제공 자격 증명 형식을 지원하고, 이러한 자격 증명 형식을 처리할 수 있는 보안 토큰 관리자를 만듭니다.

사용자 지정해야 하는 이유

클라이언트 또는 서비스 자격 증명 클래스를 사용자 지정해야 하는 이유는 여러 가지가 있습니다. 가장 먼저 시스템 제공 자격 증명 형식의 처리와 관련하여 기본 WCF 보안 동작을 변경해야 하며, 주요 이유는 다음과 같습니다.

  • 다른 확장성 지점을 사용하여 변경할 수 없는 내용을 변경해야 합니다.
  • 새 자격 증명 형식을 추가해야 합니다.
  • 새 사용자 지정 보안 토큰 형식을 추가해야 합니다.

이 항목에서는 사용자 지정 클라이언트와 서비스 자격 증명을 구현하는 방법 및 응용 프로그램 코드로부터 이들을 사용하는 방법에 대해 설명합니다.

시리즈의 첫 번째 단계

첫 번째 단계에서는 사용자 지정 자격 증명 클래스를 만들기만 하면 됩니다. 자격 증명을 사용자 지정하는 이유가 자격 증명 구축, 보안 토큰 serialization 또는 인증과 관련된 WCF 동작을 변경하려는 것이기 때문입니다. 이 단원의 다른 항목에서는 사용자 지정 serializer 및 인증자를 만드는 방법에 대해 설명합니다. 이와 관련하여 사용자 지정 자격 증명 클래스를 만드는 것이 이 시리즈의 첫 번째 항목입니다. 후속 작업(사용자 지정 serializer 및 인증자 만들기)은 사용자 지정 자격 증명을 만든 이후에야 수행할 수 있습니다. 이 항목을 기초로 한 추가 항목은 다음과 같습니다.

절차

사용자 지정 클라이언트 자격 증명 구현

  1. ClientCredentials 클래스에서 파생된 새 클래스를 정의합니다.

  2. 선택적 요소입니다. 새 자격 증명 형식에 대한 메서드 또는 속성을 제공하려면 새 속성을 추가합니다. 새 자격 증명 형식을 추가하지 않으려면 이 단계를 건너뜁니다. 아래 예제에서는 CreditCardNumber 속성을 추가합니다.

  3. CreateSecurityTokenManager 메서드를 재정의합니다. 이 메서드는 사용자 지정 클라이언트 자격 증명을 사용할 때 WCF 보안 인프라에서 자동으로 호출합니다. 이 메서드는 SecurityTokenManager 클래스 구현의 인스턴스를 만들고 반환합니다. 다음 프로시저에서는 이러한 구현을 만들 수 있는 방법에 대해 설명합니다.

  4. CloneCore 메서드를 재정의합니다.

사용자 지정 클라이언트 보안 토큰 관리자 구현

  1. ClientCredentialsSecurityTokenManager에서 파생된 새 클래스를 정의합니다.

  2. 선택적 요소입니다. 사용자 지정 SecurityTokenProvider 구현을 만들어야 하는 경우 CreateSecurityTokenProvider 메서드를 재정의합니다. 사용자 지정 보안 토큰 공급자에 대한 자세한 내용은 방법: 사용자 지정 보안 토큰 공급자 만들기을 참조하십시오.

  3. 선택적 요소입니다. 사용자 지정 SecurityTokenAuthenticator 구현을 만들어야 하는 경우 CreateSecurityTokenAuthenticator 메서드를 재정의합니다. 사용자 지정 보안 토큰 인증자에 대한 자세한 내용은 방법: 사용자 지정 보안 토큰 인증자 만들기을 참조하십시오.

  4. 선택적 요소입니다. 사용자 지정 SecurityTokenSerializer를 만들어야 하는 경우 CreateSecurityTokenSerializer 메서드를 재정의합니다. 사용자 지정 보안 토큰 및 사용자 지정 보안 토큰 serializer에 대한 자세한 내용은 방법: 사용자 지정 토큰 만들기를 참조하십시오.

응용 프로그램 코드로부터 사용자 지정 클라이언트 자격 증명 사용

  1. 서비스 인터페이스를 나타내는 생성된 클라이언트의 인스턴스를 만들거나 사용자가 통신하려고 하는 서비스를 가리키는 ChannelFactory의 인스턴스를 만듭니다.

  2. Endpoint 속성을 통해 액세스할 수 있는 Behaviors 컬렉션으로부터 시스템 제공 클라이언트 자격 증명 동작을 제거합니다.

  3. 사용자 지정 클라이언트 자격 증명 클래스의 새 인스턴스를 만들고 이 인스턴스를 Endpoint 속성을 통해 액세스할 수 있는 Behaviors 컬렉션에 추가합니다.

이전 절차에서는 응용 프로그램 코드로부터 클라이언트 자격 증명을 사용하는 방법을 보여 줍니다. 응용 프로그램 구성 파일을 사용하여 WCF 자격 증명을 구성할 수도 있습니다. 소스를 수정하고, 다시 컴파일하고, 다시 배포하지 않고도 응용 프로그램 매개 변수를 수정할 수 있기 때문에 종종 응용 프로그램 구성을 사용하는 것이 하드 코딩보다 좋습니다.

다음 절차에서는 사용자 지정 자격 증명을 구성하기 위해 지원을 제공하는 방법에 대해 설명합니다.

사용자 지정 클라이언트 자격 증명에 대한 구성 처리기 만들기

  1. ClientCredentialsElement에서 파생된 새 클래스를 정의합니다.

  2. 선택적 요소입니다. 응용 프로그램 구성을 통해 노출하려고 하는 모든 추가 구성 매개 변수에 대한 속성을 추가합니다. 아래 예제에서는 이름이 CreditCardNumber인 속성 하나를 추가합니다.

  3. 구성 요소를 사용하여 만들어진 사용자 지정 클라이언트 자격 증명 클래스의 형식을 반환하려면 BehaviorType 속성을 재정의합니다.

  4. CreateBehavior 메서드를 재정의합니다. 이 메서드는 구성 파일로부터 로드된 설정을 기반으로 사용자 지정 자격 증명 클래스의 인스턴스를 만들고 반환합니다. 사용자 지정 클라이언트 자격 증명 인스턴스로 로드된 시스템 제공 자격 증명 설정을 검색하려면 이 메서드로부터 기본 ApplyConfiguration 메서드를 호출합니다.

  5. 선택적 요소입니다. 2단계에서 속성을 추가한 경우 구성 프레임워크에 대한 추가 구성 설정을 등록하여 이를 인식할 수 있도록 하려면 Properties 속성을 재정의해야 합니다. 사용자의 속성과 기본 클래스 속성을 조합하면 이 사용자 지정 클라이언트 자격 증명 구성 요소를 통해 시스템 제공 설정을 구성할 수 있습니다.

구성 처리기 클래스가 있으면 이를 WCF 구성 프레임워크로 통합할 수 있습니다. 이를 통해 다음 절차에서처럼 사용자 지정 클라이언트 자격 증명을 클라이언트 끝점 동작 요소에서 사용할 수 있습니다.

응용 프로그램 구성에서 사용자 지정 클라이언트 자격 증명 구성 처리기 등록 및 사용

  1. <extensions> 요소 및 <behaviorExtensions> 요소를 구성 파일에 추가합니다.

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

  3. type 특성을 정규화된 형식 이름으로 설정합니다. 또한 어셈블리 이름과 기타 어셈블리 특성을 포함시킵니다.

    <system.serviceModel>
      <extensions>
        <behaviorExtensions>
          <add name="myClientCredentials" type="Microsoft.ServiceModel.Samples.MyClientCredentialsConfigHandler, CustomCredentials, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </behaviorExtensions>
      </extensions>
    <system.serviceModel>
    
  4. 구성 처리기를 등록한 후에 사용자 지정 자격 증명 요소를 시스템 제공 <clientCredentials> 요소 대신에 동일한 구성 파일 내에서 사용할 수 있습니다. 시스템 제공 속성 및 구성 처리기 구현에 추가한 새 속성을 모두 사용할 수 있습니다. 다음 예제에서는 creditCardNumber 특성을 사용하여 사용자 지정 속성의 값을 설정합니다.

    <behaviors>
      <endpointBehaviors>
        <behavior name="myClientCredentialsBehavior">
          <myClientCredentials creditCardNumber="123-123-123"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    

사용자 지정 서비스 자격 증명 구현

  1. ServiceCredentials에서 파생된 새 클래스를 정의합니다.

  2. 선택적 요소입니다. 추가 중인 새 자격 증명 값에 대한 API를 제공하려면 새 속성을 추가합니다. 새 자격 증명 값을 추가하지 않으려면 이 단계를 건너뜁니다. 다음 예제에서는 AdditionalCertificate 속성을 추가합니다.

  3. CreateSecurityTokenManager 메서드를 재정의합니다. 이 메서드는 사용자 지정 클라이언트 자격 증명을 사용할 때 WCF 인프라에서 자동으로 호출합니다. 이 메서드는 SecurityTokenManager 클래스 구현의 인스턴스를 만들고 반환하며, 이에 대해서는 다음 절차에서 설명합니다.

  4. 선택적 요소입니다. CloneCore 메서드를 재정의합니다. 이는 새 속성 또는 내부 필드를 사용자 지정 클라이언트 자격 증명 구현에 추가하는 경우에만 필요합니다.

사용자 지정 서비스 보안 토큰 관리자 구현

  1. ServiceCredentialsSecurityTokenManager 클래스에서 파생된 새 클래스를 정의합니다.

  2. 선택적 요소입니다. 사용자 지정 SecurityTokenProvider 구현을 만들어야 하는 경우 CreateSecurityTokenProvider 메서드를 재정의합니다. 사용자 지정 보안 토큰 공급자에 대한 자세한 내용은 방법: 사용자 지정 보안 토큰 공급자 만들기을 참조하십시오.

  3. 선택적 요소입니다. 사용자 지정 SecurityTokenAuthenticator 구현을 만들어야 하는 경우 CreateSecurityTokenAuthenticator 메서드를 재정의합니다. 사용자 지정 보안 토큰 인증자에 대한 자세한 내용은 방법: 사용자 지정 보안 토큰 인증자 만들기 항목을 참조하십시오.

  4. 선택적 요소입니다. 사용자 지정 SecurityTokenSerializer를 만들어야 하는 경우 CreateSecurityTokenSerializer 메서드를 재정의합니다. 사용자 지정 보안 토큰 및 사용자 지정 보안 토큰 serializer에 대한 자세한 내용은 방법: 사용자 지정 토큰 만들기를 참조하십시오.

응용 프로그램 코드로부터 사용자 지정 서비스 자격 증명 사용

  1. ServiceHost의 인스턴스를 만듭니다.

  2. Behaviors 컬렉션으로부터 시스템 제공 서비스 자격 증명 동작을 제거합니다.

  3. 사용자 지정 서비스 자격 증명 클래스의 새 인스턴스를 만들고 이 인스턴스를 Behaviors 컬렉션에 추가합니다.

위의 "Creating a configuration handler for custom client credentials" 및 "Registering and using a custom client credentials configuration handler in the application configuration" 절차에서 설명된 단계를 사용하여 구성에 대한 지원을 추가합니다. 유일한 차이점은 구성 처리기에 대한 기본 클래스로 ClientCredentialsElement 클래스 대신에 ServiceCredentialsElement 클래스를 사용하는 것입니다. 그런 다음 사용자 지정 서비스 자격 증명 요소는 시스템 제공 <serviceCredentials> 요소가 사용될 때 사용할 수 있습니다.

참고 항목

작업

방법: 사용자 지정 보안 토큰 공급자 만들기

참조

ClientCredentials
ServiceCredentials
SecurityCredentialsManager
SecurityTokenManager
ClientCredentialsElement
ServiceCredentialsElement

개념

방법: 사용자 지정 보안 토큰 인증자 만들기
방법: 사용자 지정 토큰 만들기