Teilen über


WS 2007 Federation-HTTP-Bindung

Im WS2007FederationHttp-Beispiel wird die Verwendung einer WS2007FederationHttpBindingStandardbindung veranschaulicht, die Sie zum Erstellen von Verbundszenarien verwenden können, die Version 1.3 der WS-Trust Spezifikation unterstützen.

Hinweis

Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Das Beispiel besteht aus einem konsolenbasierten Clientprogramm (Client.exe), einem konsolenbasierten Sicherheitstokendienstprogramm (Securitytokenservice.exe) und einem konsolenbasierten Dienstprogramm (Service.exe). Der Dienst implementiert einen Vertrag, der ein Anforderungs-/Antwortkommunikationsmuster definiert. Der Vertrag wird durch die ICalculator Schnittstelle definiert, die mathematische Operationen (Add, Subtract, , Multiplyund Divide) verfügbar macht. Der Client ruft ein Sicherheitstoken vom Sicherheitstokendienst (Security Token Service, STS) ab und sendet synchrone Anforderungen an den Dienst für einen bestimmten mathematischen Vorgang. Der Dienst antwortet dann mit dem Ergebnis. Clientaktivitäten sind im Konsolenfenster sichtbar.

Das Beispiel stellt den ICalculator Vertrag mithilfe des ws2007FederationHttpBinding Elements zur Verfügung. Die Konfiguration dieser Bindung auf dem Client wird im folgenden Code angezeigt:

<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>

In der <Sicherheit> gibt der security Wert an, welcher Sicherheitsmodus verwendet werden soll. In diesem Beispiel message wird Sicherheit eingesetzt, weshalb die <Nachricht> innerhalb der <Sicherheit> angegeben wird. Das <Ausstellerelement> in der <Nachricht> gibt die Adresse und Bindung für den STS an, die ein Sicherheitstoken für den Client ausgibt, damit der Client sich ICalculator beim Dienst authentifizieren kann.

Die Konfiguration dieser Bindung für den Dienst wird im folgenden Code angezeigt:

<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>

In der <Sicherheit> gibt der security Wert an, welcher Sicherheitsmodus verwendet werden soll. In diesem Beispiel message wird Sicherheit eingesetzt, weshalb die <Nachricht> innerhalb der <Sicherheit> angegeben wird. Das <issuerMetadata-Element> innerhalb ws2007FederationHttpBinding der <Nachricht> gibt die Adresse und Identität für einen Endpunkt an, der zum Abrufen von Metadaten für den STS verwendet werden kann.

Das Verhalten für den Dienst wird im folgenden Code angezeigt:

<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>

Mit <issuedTokenAuthentication>> kann der Dienst Einschränkungen für die Token angeben, die Clients bei der Authentifizierung angeben dürfen. Diese Konfiguration gibt an, dass Tokens, die von einem Zertifikat signiert wurden, dessen Subjektname CN=STS ist, vom Dienst akzeptiert werden.

STS stellt einen einzelnen Endpunkt mithilfe des Standards WS2007HttpBindingzur Verfügung. Der Dienst antwortet auf Anforderungen von Clients für Token. Wenn der Client mit einem Windows-Konto authentifiziert wird, gibt der Dienst ein Token aus, das den Benutzernamen des Clients als Anspruch enthält. Im Rahmen der Erstellung des Tokens signiert STS das Token mithilfe des privaten Schlüssels, der dem CN=STS-Zertifikat zugeordnet ist. Darüber hinaus erstellt er einen symmetrischen Schlüssel und verschlüsselt ihn mithilfe des öffentlichen Schlüssels, der dem CN=localhost-Zertifikat zugeordnet ist. Beim Zurückgeben des Tokens an den Client gibt STS auch den symmetrischen Schlüssel zurück. Der Client stellt das ausgestellte Token für den ICalculator Dienst dar und beweist, dass er den symmetrischen Schlüssel kennt, indem er die Nachricht mit diesem Schlüssel signiert.

Wenn Sie das Beispiel ausführen, wird die Anforderung für das Sicherheitstoken im STS-Konsolenfenster angezeigt. Die Anforderungen und Antworten des Vorgangs werden in den Client- und Dienstkonsolenfenstern angezeigt. Drücken Sie die EINGABETASTE in einem der Konsolenfenster, um die Anwendung herunterzufahren.

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 Setup.bat Datei können Sie den Server und STS mit den relevanten Zertifikaten konfigurieren, um eine selbst gehostete Anwendung auszuführen. Die Batchdatei erstellt zwei Zertifikate im Zertifikatspeicher "LocalMachine/TrustedPeople". Das erste Zertifikat hat einen Betreffnamen von CN=STS und wird von STS verwendet, um Sicherheitstoken zu signieren, die für den Client ausgegeben werden. Das zweite Zertifikat hat einen Betreffnamen von CN=localhost und wird von STS verwendet, um einen Schlüssel so zu verschlüsseln, damit der Dienst ihn entschlüsseln kann.

So können Sie das Beispiel einrichten, erstellen und ausführen

  1. Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.

  2. Öffnen Sie eine Entwickler-Eingabeaufforderung für Visual Studio mit Administratorrechten, und führen Sie die Setup.bat Datei aus, um die erforderlichen Zertifikate zu erstellen.

Diese Batchdatei verwendet Certmgr.exe und Makecert.exe, die mit dem Windows SDK verteilt werden. Sie müssen jedoch Setup.bat in einer Visual Studio-Eingabeaufforderung ausführen, damit das Skript diese Tools finden kann.

  1. Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.

  2. Führen Sie das Beispiel in einer Einzel- oder computerübergreifenden Konfiguration aus, indem Sie die Anweisungen unter Ausführen der Windows Communication Foundation-Beispiele befolgen. Wenn Sie Windows Vista verwenden, müssen Sie Service.exe, Client.exeund SecurityTokenService.exe mit erhöhten Rechten ausführen (klicken Sie mit der rechten Maustaste auf die Dateien, und klicken Sie dann auf "Als Administrator ausführen").