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 punto de conexión de cliente que valide el punto de conexión de servicio para asegurarse de que el punto de conexión de servicio puede utilizarse con seguridad.
El servicio expone cuatro puntos de conexión de servicio. El primer punto de conexión utiliza WSDualHttpBinding, el segundo punto de conexión utiliza la autenticación NTLM, el tercer punto de conexión habilita el flujo de la transacción y el cuarto punto de conexión 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 del punto de conexión InternetClientValidatorBehavior
al ServiceEndpoint antes de intentar utilizar un cliente de Windows Communication Foundation (WCF) para conectarse al punto de conexión. 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 que se indican en Compilación de los ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en el mismo equipo
Abra el Símbolo del sistema para desarrolladores 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, consulte Sugerencias para la solución de problemas de ejemplos de WCF.
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 para desarrolladores de Visual Studio ejecutado con privilegios de administrador, escriba
setup.bat service
. Al ejecutarsetup.bat
con el argumentoservice
se crea un certificado de servicio con el nombre de dominio completo del equipo y se exporta el certificado de servicio a un archivo nombrado Service.cer.En el servidor, edite App.config para reflejar el nuevo nombre del certificado. Es decir, cambie el atributo
findValue
del elemento <serviceCertificate> al 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 servidor, abra un Símbolo del sistema para desarrolladores de Visual Studio ejecutado con privilegios de administrador y escriba
setup.bat client
. Al ejecutarsetup.bat
con el argumentoclient
, se crea un certificado de cliente denominado Client.com y se exporta el certificado de cliente a un archivo denominado Client.cer.En el archivo de client.cs cambie el valor de dirección del punto de conexión 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. RebuildCopie el archivo Client.cer del directorio del cliente en el directorio del servicio en el servidor.
En el cliente, ejecute ImportServiceCert.bat en el Símbolo del sistema para desarrolladores de Visual Studio 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 el Símbolo del sistema para desarrolladores de Visual Studio 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, consulte Sugerencias para la solución de problemas de ejemplos de WCF.
Para realizar una limpieza después de ejecutar el 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 siguiente comando:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
.