다음을 통해 공유


WS Federation HTTP Binding

이 샘플에서는 WCF(Windows Communication Foundation)를 사용하여 일반 페더레이션 서비스, 보안 토큰 서비스 및 해당 클라이언트를 구현하는 방법을 보여 줍니다. 이 샘플은 클라이언트 콘솔 프로그램(client.exe), 보안 토큰 서비스 콘솔 프로그램(Securitytokenservice.exe) 및 서비스 콘솔 프로그램(Service.exe)으로 구성됩니다. 이 서비스는 요청-회신 통신 패턴을 정의하는 계약을 구현합니다. 계약은 수학 연산(Add, Subtract, Multiply 및 Divide)을 노출시키는 ICalculator 인터페이스에 의해 정의됩니다. 클라이언트가 STS(보안 토큰 서비스)에서 보안 토큰을 가져오고 지정된 수학 연산을 서비스에 동기적으로 요청하면 서비스에서 결과로 회신합니다. 콘솔 창에는 클라이언트 동작이 표시됩니다.

이 바인딩에 대한 자세한 내용은 How to: Create a WSFederationHttpBindingHow to: Configure Credentials on a Federation Service을 참조하십시오.

참고

이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.

이 샘플에서는 wsFederationHttpBinding Element를 사용하여 ICalculator 계약을 노출합니다. 클라이언트에서 이 바인딩의 구성은 다음과 같습니다.

<bindings>
  <wsFederationHttpBinding>
    <binding name="ServiceFed" >
      <security mode ="Message">
        <message issuedKeyType ="SymmetricKey" 
                 issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
          <issuer address ="https://localhost:8000/sts/windows" 
                  binding ="wsHttpBinding" />
        </message>
      </security>
    </binding>
  </wsFederationHttpBinding>
</bindings>

security element of wsFederationHttpBinding에서 security mode 값은 사용해야 하는 보안 모드를 구성합니다. 이 샘플에서는 메시지 보안이 사용되므로 security element of wsFederationHttpBinding 안에 message element of wsFederationHttpBinding이 지정됩니다. message element of wsFederationHttpBinding 안에서 wsFederationHttpBinding의 <issuer> 요소는 클라이언트가 계산기 서비스에 대해 인증될 수 있도록 보안 토큰을 클라이언트에게 발급하는 STS에 대한 주소와 바인딩을 지정합니다.

서비스에서 이 바인딩의 구성은 다음과 같습니다.

<bindings>
  <wsFederationHttpBinding>
    <binding name="ServiceFed" >
      <security mode ="Message">
        <message issuedKeyType ="SymmetricKey" 
                 issuedTokenType =
"http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
          <issuerMetadata address ="https://localhost:8000/sts/mex" >
            <identity>
              <certificateReference storeLocation ="CurrentUser"
                     storeName="TrustedPeople"
                     x509FindType ="FindBySubjectNameDistinguisedName" 
                     findValue ="CN=STS"/>
            </identity>
          </issuerMetadata>
        </message>
      </security>
    </binding>
  </wsFederationHttpBinding>
</bindings>

security element of wsFederationHttpBinding에서 security mode 값은 사용해야 하는 보안 모드를 구성합니다. 이 샘플에서는 메시지 보안이 사용되므로 security element of wsFederationHttpBinding 안에 <message> element of wsFederationHttpBinding이 지정됩니다. <message> element of wsFederationHttpBinding 안에서 wsFederationHttpBinding의 <issuerMetadata> 요소는 STS에 대한 메타데이터를 검색하는 데 사용할 수 있는 끝점의 주소와 ID를 지정합니다.

다음 코드에서는 서비스의 동작을 보여 줍니다.

<behavior name ="ServiceBehaviour" >
  <serviceDebug includeExceptionDetailInFaults ="true"/>
  <serviceMetadata httpGetEnabled ="true"/>
  <serviceCredentials>
    <issuedTokenAuthentication>
      <knownCertificates>
        <add storeLocation ="LocalMachine"
             storeName="TrustedPeople"
             x509FindType="FindBySubjectDistinguishedName"
             findValue="CN=STS" />
      </knownCertificates>
    </issuedTokenAuthentication>
    <serviceCertificate storeLocation ="LocalMachine"
                        storeName ="My"
                        x509FindType ="FindBySubjectDistinguishedName"
                        findValue ="CN=localhost"/>
  </serviceCredentials>
</behavior>

<issuedTokenAuthentication> of <serviceCredentials>를 통해 서비스는 인증 도중 클라이언트가 제공하는 것이 허용되는 토큰에 대한 제약 조건을 지정할 수 있습니다. 이 구성은 주체 이름이 CN=STS인 인증서에 의해 서명된 토큰을 서비스에서 수락하도록 지정합니다.

STS는 표준 wsHttpBinding을 사용하여 단일 끝점을 노출합니다. STS는 토큰에 대한 클라이언트의 요청에 응답하고 클라이언트가 Windows 계정을 사용하여 인증되는 경우 클라이언트의 사용자 이름을 클레임으로 포함하는 토큰을 발급합니다. 토큰을 만드는 도중에 STS는 CN=STS 인증서와 연관된 개인 키를 사용하여 토큰에 서명합니다. 또한 STS는 대칭 키를 만들고 CN=localhost 인증서와 연관된 공개 키를 사용하여 암호화됩니다. 토큰을 클라이언트에게 반환할 때 STS는 대칭 키도 반환합니다. 클라이언트는 발급된 토큰을 계산기 서비스에 제공하고 대칭 키로 메시지에 서명하여 해당 키를 알고 있음을 증명합니다.

샘플 실행

샘플을 실행하려면 아래 지침을 참조하십시오. 샘플을 실행하면 보안 토큰에 대한 요청이 STS 콘솔 창에 표시되고 작업 요청 및 응답이 클라이언트 및 서비스 콘솔 창에 표시됩니다. 응용 프로그램을 종료하려면 아무 콘솔 창에서나 Enter 키를 누릅니다.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

설치 배치 파일

이 샘플에 포함된 Setup.cmd 배치 파일을 사용하면 자체 호스팅 응용 프로그램을 실행하도록 관련 인증서와 함께 서버와 STS(보안 토큰 서비스)를 구성할 수 있습니다. 이 배치 파일은 LocalMachine/TrustedPeople 인증서 저장소에서 두 인증서를 모두 만듭니다. 주체 이름 CN=STS를 가지는 첫 번째 인증서는 클라이언트에 발급되는 보안 토큰에 서명하기 위해 STS에 사용됩니다. 주체 이름 CN=localhost를 가지는 두 번째 인증서는 서비스에서 해독할 수 있도록 암호를 암호화하기 위해 STS에 사용됩니다.

샘플을 설치, 빌드 및 실행하려면

  1. Setup.cmd 파일을 실행하여 필요한 인증서를 만듭니다.

  2. C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다. 솔루션의 모든 프로젝트가 빌드되는지 확인합니다(Client, RSTRSTR, SecurityTokenService, Service, Shared).

  3. Service.exe 및 SecurityTokenService.exe가 둘 다 실행 중인지 확인합니다.

  4. Client.exe를 실행합니다.

참고 항목

작업

WS 2007 Federation HTTP Binding

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.