WS 2007 Federation-HTTP-BindungWS 2007 Federation HTTP Binding

In diesem Beispiel wird die Verwendung von WS2007FederationHttpBinding veranschaulicht. Dabei handelt es sich um eine Standardbindung, mit der Sie verbundene Szenarien erstellen können, die die Version 1.3 der WS-Trust-Spezifikation unterstützen.This sample demonstrates the use of WS2007FederationHttpBinding, a standard binding that you can use to build federated scenarios that support version 1.3 of the WS-Trust specification.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Das Beispiel besteht aus einem konsolenbasierten Clientprogramm (Client.exe), einem konsolenbasierten Sicherheitstokendienstprogramm (Securitytokenservice.exe) und einem konsolenbasierten Dienstprogramm (Service.exe).The sample consists of a console-based client program (Client.exe), a console-based security token service program (Securitytokenservice.exe), and a console-based service program (Service.exe). Der Dienst implementiert einen Vertrag, der ein Anforderung-/Antwort-Kommunikationsmuster definiert.The service implements a contract that defines a request/reply communication pattern. Der Vertrag wird durch die ICalculator-Schnittstelle definiert, die mathematische Operationen (Add, Subtract, Multiply und Divide) verfügbar macht.The contract is defined by the ICalculator interface, which exposes math operations (Add, Subtract, Multiply, and Divide). Der Client empfängt ein Sicherheitstoken vom Sicherheitstokendienst (STS) und stellt beim Dienst synchrone Anforderungen an eine bestimmte mathematische Operation.The client obtains a security token from the Security Token Service (STS) and makes synchronous requests to the service for a given math operation. Der Dienst antwortet dann mit dem Ergebnis.The service then replies with the result. Die Clientaktivität ist im Konsolenfenster sichtbar.Client activity is visible in the console window.

Im Beispiel wird der ICalculator-Vertrag mit dem ws2007FederationHttpBinding-Element verfügbar gemacht.The sample makes the ICalculator contract available using the ws2007FederationHttpBinding element. Das folgende Codebeispiel zeigt die Konfiguration dieser Bindung auf dem Client.The configuration of this binding on the client is shown in the following code.

<bindings>  
  <ws2007FederationHttpBinding>  
    <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" >  
          <!-- Endpoint address and binding for Security Token Service -->  
          <issuer address ="http://localhost:8000/sts/windows"   
                  binding ="ws2007HttpBinding" />                
        </message>  
      </security>  
    </binding>  
  </ws2007FederationHttpBinding>  
</bindings>  

Auf der <Sicherheit >die security Wert gibt an, welcher Sicherheitsmodus verwendet werden soll.On the <security>, the security value specifies which security mode should be used. In diesem Beispiel message Sicherheit verwendet wird, wird daher die <Nachricht > wird angegeben, in der <Sicherheit >.In this sample, message security is used, which is why the <message> is specified inside the <security>. Die <Aussteller > Element innerhalb der <Nachricht > gibt die Adresse und Bindung für den STS, der ein Sicherheitstoken an den Client ausgibt, damit der Client kann authentifizieren Sie sich bei der ICalculator Dienst.The <issuer> element inside the <message> specifies the address and binding for the STS that issues a security token to the client so that the client can authenticate to the ICalculator service.

Das folgende Codebeispiel zeigt die Konfiguration dieser Bindung auf dem Dienst.The configuration of this binding on the service is shown in the following code.

<bindings>  
  <ws2007FederationHttpBinding>  
    <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" >  
          <!-- Metadata address for Security Token Service -->  
          <issuerMetadata address ="http://localhost:8000/sts/mex" >  
            <identity>  
              <certificateReference storeLocation ="CurrentUser"   
                                    storeName="TrustedPeople"   
                                    x509FindType ="FindBySubjectDistinguishedName"   
                                    findValue ="CN=STS" />  
            </identity>  
          </issuerMetadata>  
        </message>  
      </security>  
    </binding>  
  </ws2007FederationHttpBinding>  
</bindings>  

Auf der <Sicherheit >die security Wert gibt an, welcher Sicherheitsmodus verwendet werden soll.On the <security>, the security value specifies which security mode should be used. In diesem Beispiel message Sicherheit verwendet wird, wird daher die <Nachricht > wird angegeben, in der <Sicherheit >.In this sample, message security is used, which is why the <message> is specified inside the <security>. Die <IssuerMetadata > Element des ws2007FederationHttpBinding innerhalb der <Nachricht > gibt die Adresse und Identität für einen Endpunkt, der zum Abrufen von verwendet werden kann Metadaten für den STS.The <issuerMetadata> element of ws2007FederationHttpBinding inside the <message> specifies the address and identity for an endpoint that can be used to retrieve metadata for the STS.

Das Verhalten für den Dienst wird im folgenden Code gezeigt.The behavior for the service is shown in the following code.

<behaviors>  
  <serviceBehaviors>  
    <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>  
  </serviceBehaviors>  
</behaviors>  

Die <IssuedTokenAuthentication >> ermöglicht es dem Dienst Einschränkungen für die Token angeben, können Clients während der Authentifizierung an.The <issuedTokenAuthentication>> allows the service to specify constraints on the tokens it allows clients to present during authentication. In dieser Konfiguration wird angegeben, dass von einem Zertifikat mit dem Ausstellernamen CN=STS signierte Token vom Dienst akzeptiert werden.This configuration specifies that tokens signed by a certificate whose subject name is CN=STS are accepted by the service.

STS macht einen einzelnen Endpunkt durch die Standard-WS2007HttpBinding verfügbar.STS makes a single endpoint available using the standard WS2007HttpBinding. Der Dienst antwortet auf Token-Anforderungen von Clients.The service responds to requests from clients for tokens. Wenn der Client mit einem Windows-Konto authentifiziert ist, gibt der Dienst ein Token aus, das den Benutzernamen des Clients als einen Anspruch enthält.If the client is authenticated using a Windows account, the service issues a token that contains the client's user name as a claim. Beim Erstellen des Tokens signiert STS das Token mit dem privaten Schlüssel, der dem CN=STS-Zertifikat zugeordnet ist.As part of creating the token, STS signs the token using the private key associated with the CN=STS certificate. Außerdem wird ein symmetrischer Schlüssel erstellt und mit dem öffentlichen Schlüssel verschlüsselt, der dem CN=localhost-Zertifikat zugeordnet ist.In addition, it creates a symmetric key and encrypts it using the public key associated with the CN=localhost certificate. Beim Zurückgeben des Tokens an den Client gibt STS auch den symmetrischen Schlüssel zurück.In returning the token to the client, STS also returns the symmetric key. Der Client zeigt dem ICalculator-Dienst das ausgegebene Token und beweist, dass der symmetrische Schlüssel bekannt ist, indem die Nachricht mit diesem Schlüssel signiert wird.The client presents the issued token to the ICalculator service and proves that it knows the symmetric key by signing the message with that key.

Wenn Sie das Beispiel ausführen, wird die Anforderung des Sicherheitstokens im STS-Konsolenfenster angezeigt.When you run the sample, the request for the security token is shown in the STS console window. Die Anforderungen und Antworten des Vorgangs werden im Client- und Dienstkonsolenfenster angezeigt.The operation's requests and responses are displayed in the client and service console windows. Drücken Sie die EINGABETASTE in einem der Konsolenfenster, um die Anwendung zu schließen.Press ENTER in any of the console windows to shut down the application.

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.

Mit der in diesem Beispiel enthaltenen Datei "Setup.bat" können Sie den Server und STS mit den relevanten Zertifikaten zum Ausführen einer selbst gehosteten Anwendung konfigurieren.The Setup.bat file included with this sample allows you to configure the server and STS with the relevant certificates to run a self-hosted application. Die Batchdatei erstellt zwei Zertifikate im Zertifikatspeicher LocalMachine/TrustedPeople.The batch file creates two certificates in the LocalMachine/TrustedPeople certificate store. Der Antragstellername des ersten Zertifikats lautet CN=STS. Dieses Zertifikat wird vom STS zum Signieren des Sicherheitstokens verwendet, das an den Client herausgegeben wird.The first certificate has a subject name of CN=STS and is used by STS to sign the security tokens that it issues to the client. Der Antragstellername des zweiten Zertifikats lautet CN=localhost. Dieses Zertifikat wird vom STS verwendet, um einen Schlüssel so zu verschlüsseln, dass er vom Dienst entschlüsselt werden kann.The second certificate has a subject name of CN=localhost and is used by STS to encrypt a key in a way that the service can decrypt.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Öffnen Sie eine Visual Studio-Eingabeaufforderung mit Administratorrechten, und führen Sie die Datei Setup.bat aus, um die erforderlichen Zertifikate zu erstellen.Open a Visual Studio command prompt with administrator privileges and run the Setup.bat file to create the required certificates.

Diese Batchdatei verwendet Certmgr.exe und Makecert.exe, die mit dem Windows SDK verteilt werden.This batch file uses Certmgr.exe and Makecert.exe, which are distributed with the Windows SDK. Sie müssen Setup.bat an einer Visual Studio-Eingabeaufforderung ausführen, sodass das Skript diese Tools finden kann.However, you must run Setup.bat from within a Visual Studio command prompt to enable the script to find these tools.

  1. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  2. Um das Beispiel in einer Einzelcomputer- oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-computer configuration, follow the instructions in Running the Windows Communication Foundation Samples. Bei Verwendung von Windows VistaWindows Vista, führen Sie Service.exe, Client.exe und SecurityTokenService.exe mit erweiterten Berechtigungen (mit der rechten Maustaste in den Dateien, und klicken Sie dann auf als Administrator ausführen).If you are using Windows VistaWindows Vista, you must run Service.exe, Client.exe, and SecurityTokenService.exe with elevated privileges (right-click the files and then click Run as administrator).

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your computer. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Binding\WS\WS2007FederationHttp

Siehe auchSee Also