Compartir a través de


Enlace HTTP de federación de WS 2007

El ejemplo WS2007FederationHttp muestra el uso de WS2007FederationHttpBinding, un enlace estándar que puede usar para crear escenarios federados que admiten la versión 1.3 de la especificación de WS-Trust.

Nota:

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

El ejemplo consta de un programa de cliente basado en consola (Client.exe), un programa de servicio de token de seguridad basado en consola (Securitytokenservice.exe) y un programa de servicio basado en consola (Service.exe). El servicio implementa un contrato que define un patrón de comunicación de solicitud/respuesta. El contrato se define mediante la ICalculator interfaz , que expone operaciones matemáticas (Add, Subtract, Multiplyy Divide). El cliente obtiene un token de seguridad del servicio de token de seguridad (STS) y realiza solicitudes sincrónicas al servicio para una operación matemática determinada. A continuación, el servicio responde con el resultado. La actividad del cliente está visible en la ventana de la consola.

El ejemplo hace que el ICalculator contrato esté disponible mediante el ws2007FederationHttpBinding elemento . La configuración de este enlace en el cliente se muestra en el código siguiente:

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

En <security>, el valor de security especifica el modo de seguridad que debe utilizarse. En este ejemplo, se usa la seguridad de message, que es por lo que el elemento <mensaje> se especifica en <security>. El <elemento emisor> dentro del <mensaje> especifica la dirección y el enlace del STS que emite un token de seguridad al cliente para que el cliente pueda autenticarse en el ICalculator servicio.

La configuración de este enlace en el servicio se muestra en el código siguiente:

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

En <security>, el valor de security especifica el modo de seguridad que debe utilizarse. En este ejemplo, se usa la seguridad de message, que es por lo que el elemento <mensaje> se especifica en <security>. El <elemento issuerMetadata> de ws2007FederationHttpBinding dentro del <mensaje> especifica la dirección y la identidad de un punto de conexión que se puede usar para recuperar metadatos para el STS.

El comportamiento del servicio se muestra en el código siguiente:

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

IssuedTokenAuthentication<>> permite al servicio especificar restricciones en los tokens que permite a los clientes presentar durante la autenticación. Esta configuración especifica que el servicio acepta los tokens firmados por un certificado cuyo nombre de firmante es CN=STS.

STS hace que un único punto de conexión esté disponible mediante el estándar WS2007HttpBinding. El servicio responde a las solicitudes de los clientes para los tokens. Si el cliente se autentica mediante una cuenta de Windows, el servicio emite un token que contiene el nombre de usuario del cliente como notificación. Como parte de la creación del token, STS firma el token mediante la clave privada asociada al certificado CN=STS. Además, crea una clave simétrica y la cifra mediante la clave pública asociada al certificado CN=localhost. Al devolver el token al cliente, STS también devuelve la clave simétrica. El cliente presenta el token emitido al ICalculator servicio y demuestra que conoce la clave simétrica firmando el mensaje con esa clave.

Al ejecutar el ejemplo, la solicitud del token de seguridad se muestra en la ventana de la consola de STS. Las solicitudes y respuestas de la operación se muestran en las ventanas de consola de cliente y servicio. Presione ENTRAR en cualquiera de las ventanas de consola para apagar la aplicación.

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.

El archivoSetup.bat incluido con este ejemplo le permite configurar el servidor y el STS con los certificados pertinentes para ejecutar una aplicación autohospedada. El archivo por lotes crea dos certificados en el almacén de certificados LocalMachine/TrustedPeople. El primer certificado tiene un nombre de sujeto de CN=STS y es utilizado por STS para firmar los tokens de seguridad que emite al cliente. El segundo certificado tiene un nombre sujeto de CN=localhost y el STS lo utiliza para cifrar en cierto modo una clave que el servicio puede descifrar.

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Abra una consola de comandos de Visual Studio con privilegios de administrador y ejecute el archivo Setup.bat para crear los certificados necesarios.

Este archivo por lotes usa Certmgr.exe y Makecert.exe, que se distribuyen con Windows SDK. Sin embargo, debe ejecutar Setup.bat desde un símbolo del sistema de Visual Studio para que el script pueda encontrar estas herramientas.

  1. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  2. Para ejecutar el ejemplo en una configuración de un solo equipo o entre equipos, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation. Si usa Windows Vista, debe ejecutar Service.exe, Client.exey SecurityTokenService.exe con privilegios elevados (haga clic con el botón derecho en los archivos y, a continuación, haga clic en Ejecutar como administrador).