Comparteix a través de


Escenarios no admitidos

Por diversos motivos, Windows Communication Foundation (WCF) no admite algunos escenarios de seguridad específicos. Por ejemplo, Windows XP Home Edition no implementa los protocolos de autenticación SSPI o Kerberos y, por tanto, no permite ejecutar un servicio con autenticación de Windows en esa plataforma. Se admiten otros mecanismos de autenticación, como el nombre de usuario o la contraseña y la autenticación HTTP o HTTPS integrada en la ejecución de WCF en Windows XP Home Edition.

Escenarios de suplantación

Es posible que la identidad suplantada no fluya cuando los clientes realicen llamadas asincrónicas

Cuando un cliente realiza llamadas asincrónicas a un servicio WCF usando la autenticación de Windows bajo suplantación, se podría producir la autenticación con la identidad del proceso del cliente en lugar de la identidad suplantada.

WCF no admite la suplantación y InvalidOperationException se produce cuando se dan las siguientes condiciones:

  • El sistema operativo es Windows XP.

  • El modo de autenticación resulta en una identidad de Windows.

  • La propiedad Impersonation de OperationBehaviorAttribute está establecida en Required.

  • Se crea un token de contexto de seguridad (SCT) basado en estado (de forma predeterminada, la creación está deshabilitada).

El SCT basado en estado solo se puede crear mediante un enlace personalizado. Para obtener más información, consulte Procedimiento para crear un token de contexto de seguridad para una sesión segura). En código, el token se habilita mediante la creación de un elemento de enlace de seguridad (SymmetricSecurityBindingElement o AsymmetricSecurityBindingElement) cuando se usa el método SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean) o SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean) y establecer el parámetro requireCancellation en false. El parámetro hace referencia al almacenamiento en caché del SCT. Al establecer el valor en false, se habilita la característica del SCT basado en estado.

De forma alternativa, en la configuración, el token se habilita cuando se crea <customBinding>, agregar un elemento <security> y establecer el atributo authenticationMode en SecureConversation y el atributo requireSecurityContextCancellation en true.

Nota

Los requisitos anteriores son específicos. Por ejemplo, CreateKerberosBindingElement crea un elemento de enlace que resulta en una identidad de Windows, pero no establece un SCT. Por tanto, puede usarlo con la opción Required en Windows XP.

Posible conflicto ASP.NET

WCF y ASP.NET pueden habilitar o deshabilitar la suplantación. Cuando ASP.NET hospeda una aplicación WCF, puede darse un conflicto entre los valores de configuración de WCF y ASP.NET. En caso de conflicto, la configuración de WCF tiene prioridad, a menos que la propiedad Impersonation esté establecida en NotAllowed, en cuyo caso el valor de suplantación ASP.NET tendrá prioridad.

Se puede producir un error en las cargas de ensamblado si se utiliza la suplantación

Si el contexto suplantado no tiene los derechos de acceso para cargar un ensamblado y si es la primera vez Common Language Runtime (CLR) intenta cargar el ensamblado para ese AppDomain, el AppDomain almacena en memoria caché el error. Los siguientes intentos de cargar ese ensamblado (o ensamblados) producirán un error, incluso después de revertir la suplantación e incluso si el contexto revertido tiene derechos de acceso para cargar el ensamblado. Esto se debe a que CLR no vuelve a intentar la carga una vez que el contexto del usuario ha cambiado. Debe reiniciar el dominio de la aplicación para recuperarse del error.

Nota

El valor predeterminado de la propiedad AllowedImpersonationLevel de la clase WindowsClientCredential es Identification. En la mayoría de los casos, un contexto de suplantación del nivel de identificación no tiene derechos para cargar ensamblados adicionales. Éste es el valor predeterminado, por lo que esto se trata de una condición muy común a tener en cuenta. La suplantación del nivel de identificación también tiene lugar cuando el proceso de suplantación no tiene el privilegio SeImpersonate. Para obtener más información, consulte Delegación y suplantación.

La delegación necesita la negociación de las credenciales

Para utilizar el protocolo de autenticación Kerberos con la delegación, debe implementar el protocolo Kerberos con negociación de credenciales (a veces denominado Kerberos de autenticación mutua o de varios pasos). Si implementa la autenticación de Kerberos sin la negociación de la credencial (denominada en ocasiones Kerberos de "un disparo" o "fase única"), se producirá una excepción. Para obtener más información sobre cómo implementar la negociación de credenciales, consulte Depuración de errores de autenticación de Windows.

Criptografía

SHA-256 compatible solo para usos de clave simétrica

WCF admite una variedad de algoritmos de creación de síntesis de firma y cifrado que puede especificar mediante el conjunto de algoritmos en los enlaces que proporciona el sistema. Para mejorar la seguridad, WCF admite el algoritmo hash seguro (SHA) 2, en específico SHA-256, para crear hash de síntesis de firma. Esta versión admite SHA-256 solo para usos de clave simétrica, como las claves de Kerberos, y donde no se usa un certificado X.509 para firmar el mensaje. WCF no admite las firmas RSA (que se usan en certificados X.509) mediante el hash SHA-256, debido a la falta de compatibilidad actual con RSA-SHA256 en WinFX.

No se admiten hash SHA-256 compatibles con FIPS

WCF no admite los hash compatibles con SHA-256 FIPS, por lo que WCF no admite los conjuntos de algoritmos que usan SHA-256 en sistemas donde es necesario el uso de algoritmos compatibles con FIPS.

Los algoritmos compatibles con FIPS pueden producir errores si se edita el registro

Puede habilitar y deshabilitar los algoritmos conformes a los estándares de procesamiento de información federal (FIPS) utilizando el complemento Microsoft Management Console (MMC) de configuración de seguridad local. También puede tener acceso al valor en el registro. Sin embargo, tenga en cuenta que WCF no admite el uso del registro para restablecer la configuración. Si el valor está establecido en algo distinto de 1 ó 0, pueden producirse resultados incoherentes entre el CLR y el sistema operativo.

Limitación de cifrado AES compatible con FIPS

El cifrado AES compatible con FIPS no funciona en devoluciones de llamada dúplex bajo suplantación del nivel de identificación.

Certificados CNG/KSP

La API de criptografía de nueva generación (CNG) es el reemplazo a largo plazo de CryptoAPI. Esta API está disponible en código no administrado en Windows Vista, Windows Server 2008 y versiones posteriores de Windows.

.NET Framework 4.6.1 y versiones anteriores no admiten estos certificados, ya que usan CryptoAPI heredado para controlar certificados CNG/KSP. El uso de estos certificados con .NET Framework 4.6.1 y versiones anteriores producirá una excepción.

Hay dos posibles maneras de saber si un certificado utiliza KSP:

  • Ejecute p/invoke para CertGetCertificateContextProperty e inspeccione dwProvType en la CertGetCertificateContextProperty devuelta.

  • Use el comando certutil desde la línea de comandos para consultar los certificados. Para obtener más información, consulte las tareas CertUtil para la solución de problemas de certificados.

Se produce un error en la seguridad del mensaje si es necesario el uso de suplantación ASP.NET y compatibilidad de ASP.NET

WCF no admite la siguiente combinación de valores, ya que pueden evitar que se produzca la autenticación del cliente:

  • La suplantación ASP.NET está habilitada. Esto se lleva a cabo en el archivo Web.config cuando se establece el atributo impersonate del elemento <identity> en true.

  • El modo de compatibilidad ASP.NET se habilita cuando se establece el atributo aspNetCompatibilityEnabled de <serviceHostingEnvironment> o true.

  • Se utiliza la seguridad de modo de mensaje.

La solución consiste en desactivar el modo de compatibilidad ASP.NET. O bien, si el modo de compatibilidad ASP.NET es necesario, deshabilite la característica de suplantación ASP.NET y use en su lugar la suplantación que proporciona WCF. Para obtener más información, consulte Delegación y suplantación.

Error de dirección literal IPv6

Se produce un error en las solicitudes de seguridad cuando el cliente y el servicio están en el mismo equipo y se utilizan direcciones IPv6 literales para el servicio.

Las direcciones IPv6 literales funcionan si el servicio y el cliente están en equipos diferentes.

Errores de recuperación de WSDL con confianza federada

WCF necesita exactamente un documento WSDL para cada nodo de la cadena con confianza federada. Tenga el cuidado de no establecer un bucle al especificar los extremos. Una manera en la que se pueden producir bucles es cuando se utiliza una descarga WSDL de cadenas de confianza federadas con dos o más vínculos en el mismo documento WSDL. Un escenario común donde se puede dar este problema es un servicio federado en el que el servidor de token de seguridad y el servicio se encuentran en el mismo ServiceHost.

Un ejemplo de esta situación sería un servicio con las tres direcciones de punto de conexión siguientes:

  • http://localhost/CalculatorService/service (Servicio)

  • http://localhost/CalculatorService/issue_ticket (STS)

  • http://localhost/CalculatorService/mex (punto de conexión de metadatos)

Esto produce una excepción.

Puede hacer que este escenario funcione colocando el extremo issue_ticket en otra parte.

Se pueden perder los atributos de importación de WSDL

WCF pierde la pista de los atributos de un elemento <wst:Claims> al hacer una importación de WSDL. Esto ocurre durante una importación de WSDL si <Claims>WSFederationHttpBinding.Security.Message.TokenRequestParameters en lugar de usar directamente las colecciones de tipos de notificación. Puesto que la importación pierde los atributos, el enlace no efectúa correctamente el viaje de ida y vuelta (round trip) a través de WSDL y por lo tanto es incorrecto en el cliente.

La solución es modificar el enlace directamente en el cliente después de realizar la importación.

Consulte también