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 WCF realiza llamadas asincrónicas a un servicio WCF utilizando la autenticación de Windows bajo suplantación, la autenticación podría llevarse a cabo con la identidad del proceso del cliente en lugar de la identidad suplantada.

WCF no admite la suplantación y se lanza un InvalidOperationException 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 utilizando una vinculación personalizada. 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>, luego se agrega un elemento <security> y se establece 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 la configuración de suplantación de ASP.NET toma precedencia.

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 intentos subsiguientes de cargar ese ensamblado (o ensamblados) fallarán, 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 ensamblajes 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 a 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 múltiples pasos o de múltiples etapas). Si implementa la autenticación de Kerberos sin la negociación de credenciales (a veces denominada Kerberos de "un solo intento" o "una sola fase"), 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 cifrado y creación de resumen de firma que puede especificar mediante la suite de algoritmos en las configuraciones proporcionadas por el sistema. Para mejorar la seguridad, WCF admite los algoritmos del Algoritmo de Hash Seguro (SHA) 2, específicamente SHA-256, para crear resúmenes de firma hash. 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 acceder a la configuración 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 llamadas de retorno dúplex durante la suplantación de identidad a 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 un p/invoke de CertGetCertificateContextProperty e inspeccione dwProvType en el CertGetCertificateContextProperty devuelto.

  • 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 se utiliza la suplantación de identidad de ASP.NET y se requiere 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 de identidad de 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 en 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 función de suplantación ASP.NET y use en su lugar la suplantación ofrecida por 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.

Fallas en la recuperación de WSDL con trust federado

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 (el servicio de token de seguridad (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> en una plantilla RST al hacer una importación de WSDL. Esto ocurre durante una importación de WSDL si especificas <Claims> directamente en WSFederationHttpBinding.Security.Message.TokenRequestParameters o IssuedSecurityTokenRequestParameters.AdditionalRequestParameters en lugar de usar directamente las colecciones de tipos de reivindicación. Dado que la importación pierde los atributos, el enlace no efectúa correctamente la transferencia bidireccional a través de WSDL y, por consiguiente, es incorrecto en el lado del cliente.

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

Consulte también