Validación de cliente
Los servicios publican frecuentemente los metadatos para habilitar la generación automática y la configuración de tipos de proxy de cliente. Cuando no se confía en el servicio, las aplicaciones cliente deberían comprobar y validar que los metadatos cumplen con la directiva de la aplicación cliente con respecto a la seguridad, transacciones, el tipo de contrato de servicios etc. El siguiente ejemplo muestra cómo escribir un comportamiento de extremo de cliente que valide el extremo de servicio para asegurarse de que el extremo de servicio puede utilizarse con seguridad.
El servicio expone cuatro extremos de servicio. El primer extremo utiliza WSDualHttpBinding, el segundo extremo utiliza la autenticación NTLM, el tercer extremo habilita el flujo de la transacción y el cuarto extremo utiliza la autenticación basada en certificados.
El cliente utiliza la clase MetadataResolver para recuperar los metadatos para el servicio. El cliente exige una directiva que prohíba los enlaces dúplex, la autenticación NTLM y el flujo de la transacción mediante un comportamiento que se encargue de validar. Por cada instancia ServiceEndpoint importada de los metadatos del servicio, la aplicación cliente agrega una instancia del comportamiento de extremo InternetClientValidatorBehavior a ServiceEndpoint antes de intentar utilizar un cliente Windows Communication Foundation (WCF) para conectarse al extremo. El método Validate de comportamiento se ejecuta antes de llamar cualquier operación en el servicio y exige la directiva del cliente iniciando InvalidOperationExceptions.
Para compilar el ejemplo
- Para compilar la solución, siga las instrucciones de Compilación de los ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en el mismo equipo
Abra un símbolo del sistema de Visual Studio con privilegios de administrador y ejecute Setup.bat desde la carpeta de instalación del ejemplo. De esta forma, se instalan todos los certificados necesarios para ejecutar el ejemplo.
Ejecute la aplicación de servicio desde \service\ Debug.
Ejecute la aplicación cliente desde \client\ Debug. La actividad del cliente se muestra en la aplicación de consola del cliente.
Si el cliente y el servicio no se pueden comunicar, vea Troubleshooting Tips.
Quite los certificados ejecutando Cleanup.bat cuando haya finalizado con el ejemplo. Otros ejemplos de seguridad usan los mismos certificados.
Para ejecutar el ejemplo en varios equipos
En el servidor, en un símbolo del sistema de Visual Studio ejecutado con privilegios de administrador, escriba setup.bat service. Al ejecutar setup.bat
En el servidor, edite App.config para reflejar el nuevo nombre del certificado. Es decir, cambie el atributo findValue del elemento <serviceCertificate> of <serviceCredentials> Element por el nombre de dominio completo del equipo.
Copie el archivo Service.cer del directorio de servicio al directorio del cliente en el equipo cliente.
En el cliente, abra un símbolo del sistema de Visual Studio 2010 con privilegios de administrador y escriba setup.bat client. Al ejecutar setup.bat
En el archivo de client.cs cambie el valor de dirección del extremo MEX y findValue para establecer el certificado de servidor predeterminado para que coincida con la nueva dirección de su servicio. Para hacerlo, reemplace el host local con el nombre de dominio completo del servidor. Recompile.
Copie el archivo Client.cer del directorio del cliente en el directorio del servicio en el servidor.
En el cliente, ejecute ImportServiceCert.bat en un símbolo del sistema de Visual Studio abierto con privilegios de administrador. Así se importa el certificado del servicio del archivo Service.cer en el almacén CurrentUser - TrustedPeople.
En el servidor, ejecute ImportClientCert.bat en un símbolo del sistema de Visual Studio abierto con privilegios de administrador. De esta forma se importa el certificado del cliente desde el archivo Client.cer al almacén LocalMachine - TrustedPeople.
En el equipo del servicio, compile el proyecto de servicio en Visual Studio y ejecute service.exe.
En el equipo cliente, ejecute client.exe.
- Si el cliente y el servicio no se pueden comunicar, vea Troubleshooting Tips.
Para limpiar después del ejemplo
Ejecute Cleanup.bat en la carpeta de ejemplos cuando haya terminado de ejecutar el ejemplo.
Nota: Este script no quita los certificados del servicio en un cliente cuando el ejemplo se ejecuta en varios equipos. Si ha ejecutado ejemplos de WCF que usan certificados en varios equipos, asegúrese de borrar los certificados del servicio que se hayan instalado en el almacén CurrentUser - TrustedPeople. Para ello, utilice el comando siguiente: certmgr - del - r CurrentUser - s TrustedPeople - c - n <Nombre de Servidor Equipo Completo>. Por ejemplo: certmgr - del - r CurrentUser - s TrustedPeople - c - n server1.contoso.com.