Compartir a través de


Cómo: Proteger un servicio con credenciales de Windows

En este tema se muestra cómo habilitar la seguridad de transferencia en un servicio Windows Communication Foundation (WCF) que reside en un dominio de Windows y al que llaman los clientes del mismo dominio. Para obtener más información acerca de este escenario, consulte Seguridad del transporte con la autenticación de Windows. Para obtener una aplicación de ejemplo, consulte el ejemplo WSHttpBinding.

En este tema se parte del supuesto de que ya tiene definidas una interfaz e implementación de contrato. También puede modificar un servicio y cliente existentes.

Puede proteger completamente un servicio con credenciales de Windows en el código. Alternativamente, puede omitir una parte del código mediante un archivo de configuración. En este tema se explican ambos métodos. Asegúrese de que sigue solamente uno de ellos.

Los tres primeros procedimientos muestran cómo proteger el servicio en el código. En el cuarto y quinto procedimientos se muestra cómo hacerlo con un archivo de configuración.

Mediante código

El código completo para el servicio y el cliente se encuentra en la sección Ejemplo al final de este tema.

El primer procedimiento le guía en la creación y configuración de una clase WSHttpBinding en el código. El enlace usa el transporte HTTP. El mismo enlace se usa en el cliente.

Para crear un WSHttpBinding que utiliza credenciales de Windows y seguridad de mensaje

  1. El código de este procedimiento se encuentra insertado al principio del método Run de la clase Test en el código del servicio, en la sección Ejemplo.

  2. Cree una instancia de la clase WSHttpBinding.

  3. Establezca la propiedad Mode de la clase WsHttpSecurity en Message.

  4. Establezca la propiedad ClientCredentialType de la clase MessageSecurityOverHttp en Windows.

  5. El código de este procedimiento es el siguiente:

Utilizar el enlace en un servicio

Éste es el segundo procedimiento, que muestra cómo usar el enlace en un servicio autohospedado. Para obtener más información acerca de cómo hospedar los servicios, consulte Servicios de hospedaje.

Utilizar un enlace en un servicio

  1. Inserte el código de este procedimiento después del código del procedimiento anterior.

  2. Cree una variable TypecontractType con nombre y asígnele el tipo de la interfaz (ICalculator). Cuando utilice Visual Basic, utilice al operador GetType; cuando utilice C#, utilice la palabra clave typeof.

  3. Cree una segunda variable TypeserviceType con nombre y asígnele el tipo del contrato implementado (Calculator).

  4. Cree una instancia de la clase Uri denominada baseAddress con la dirección base del servicio. La dirección base debe tener un esquema que coincida con el transporte. En este caso, el esquema de transporte es HTTP y la dirección incluye el identificador uniforme de recursos (URI) especial "localhost" y un número de puerto (8036) así como una dirección de extremo base ("serviceModelSamples/): https://localhost:8036/serviceModelSamples/.

  5. Cree una instancia de la claseServiceHost con serviceType y variables baseAddress.

  6. Agregue un extremo al servicio incluyendo contractType, el enlace y el nombre del extremo ("secureCalculator"). Un cliente debe concatenar la dirección base y el nombre de extremo al iniciar una llamada al servicio.

  7. Llame al método Open para iniciar el servicio. El código de este procedimiento se muestra aquí:

Utilizar el enlace en un cliente

Este procedimiento muestra cómo generar un proxy que se comunica con el servicio. El proxy se genera con la ServiceModel Metadata Utility Tool (Svcutil.exe), que usa los metadatos del servicio para crear el proxy.

En este procedimiento también se crea una instancia de la clase WSHttpBinding para comunicarse con el servicio y, a continuación, se llama al servicio.

Este ejemplo sólo utiliza código para crear el cliente. Como alternativa, puede utilizar un archivo de configuración, que se muestra en la sección que sigue a este procedimiento.

Para usar un enlace en un cliente con el código

  1. Use la herramienta SvcUtil.exe para generar el código del proxy a partir de los metadatos del servicio. Para obtener más información, consulte Creación de un cliente de Windows Communication Foundation. El código de proxy generado hereda de la clase ClientBase, lo cual garantiza que cada cliente tenga los constructores, métodos y propiedades necesarios para comunicarse con un servicio WCF. En este ejemplo, el código generado incluye la clase CalculatorClient, que implementa la interfaz ICalculator, habilitando la compatibilidad con el código del servicio.

  2. El código de este procedimiento se encuentra insertado al principio del método Main del programa cliente.

  3. Cree una instancia de la clase WSHttpBinding y establezca su modo de seguridad en Message y su tipo de credencial de cliente en Windows. El ejemplo denomina el clientBindingvariable.

  4. Cree una instancia de la clase EndpointAddress denominada serviceAddress. Inicialice la instancia con la dirección base concatenada con el nombre de extremo.

  5. Cree una instancia de la clase de cliente generada con serviceAddress y las variables clientBinding.

  6. Llame el método Open, como se indica el siguiente código.

  7. Llame al servicio y muestre los resultados.

Usar el archivo de configuración

En lugar de crear el enlace con código de procedimiento, puede usar el código siguiente, que se muestra para la sección de enlaces del archivo de configuración.

Si aún no tiene un servicio definido, consulte Diseño e implementación de servicios y Configuración de servicios.

Nota   Este código de configuración se usa tanto en el archivo de configuración del servicio como del cliente.

Habilitar la seguridad de la transferencia en un servicio en un dominio de Windows utilizando la configuración

  1. Agregue un elemento <wsHttpBinding> a la sección del elemento <bindings> del archivo de configuración.

  2. Agregue un elemento <binding> al elemento <WSHttpBinding> y establezca el atributo configurationName en un valor apropiado a su aplicación.

  3. Agregue un elemento <security> y establezca el atributo mode en Message.

  4. Agregue un elemento <message> y establezca el atributo clientCredentialType en Windows.

  5. En el archivo de configuración del servicio, reemplace la sección <bindings> con el código siguiente. Si aún no tiene un archivo de configuración de servicio, consulte Utilización de enlaces para configurar servicios y clientes.

    <bindings>
      <wsHttpBinding>
       <binding name = "wsHttpBinding_Calculator">
         <security mode="Message">
           <message clientCredentialType="Windows"/>
         </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    

Utilizar el enlace en un cliente

En este procedimiento se muestra cómo generar dos archivos: un proxy que se comunica con el servicio y un archivo de configuración. También se describen los cambios en el programa cliente, que es el tercer archivo utilizado en el cliente.

Para usar un enlace en un cliente mediante configuración

  1. Use la herramienta SvcUtil.exe para generar el código proxy y el archivo de configuración a partir de los metadatos del servicio. Para obtener más información, consulte Creación de un cliente de Windows Communication Foundation.

  2. Reemplace la sección <Bindings> del archivo de configuración generado con el código de configuración de la sección anterior.

  3. El código de procedimiento se encuentra insertado al principio del método Main del programa cliente.

  4. Cree una instancia de la clase de cliente generada, pasando el nombre del enlace en el archivo de configuración como parámetro de entrada.

  5. Llame al método Open, como se muestra en el siguiente código.

  6. Llame al servicio y muestre los resultados.

Ejemplo

Consulte también

Tareas

Creación de un cliente de Windows Communication Foundation

Referencia

WSHttpBinding

Conceptos

Seguridad de servicios
Información general sobre seguridad

Otros recursos

ServiceModel Metadata Utility Tool (Svcutil.exe)