Compartir a través de


Selección de un tipo de credencial

Las credenciales son los datos que Usa Windows Communication Foundation (WCF) para establecer una identidad o funcionalidad reclamadas. Por ejemplo, un pasaporte es una credencial que un gobierno emite para demostrar la ciudadanía en un país o región. En WCF, las credenciales pueden adoptar muchas formas, como tokens de nombre de usuario y certificados X.509. En este tema se describen las credenciales, cómo se usan en WCF y cómo seleccionar la credencial adecuada para la aplicación.

En muchos países y regiones, una licencia de conducir es un ejemplo de una credencial. Una licencia contiene datos que representan la identidad y las funcionalidades de una persona. Contiene la prueba de posesión en forma de imagen del posesor. La licencia la emite una autoridad de confianza, normalmente un departamento gubernamental de licencias. La licencia está sellada y puede contener un holograma, mostrando que no se ha manipulado o falsificado.

Presentar una credencial implica presentar los datos y la prueba de posesión de los datos. WCF admite una variedad de tipos de credenciales tanto en los niveles de transporte como de seguridad de mensajes. Por ejemplo, considere dos tipos de credenciales admitidas en WCF: nombre de usuario y (X.509) credenciales de certificado.

Para la credencial de nombre de usuario, el nombre de usuario representa la identidad reclamada y la contraseña proporciona una prueba de posesión. La autoridad de confianza en este caso es el sistema que valida el nombre de usuario y la contraseña.

Con una credencial de certificado X.509, el nombre del sujeto, el nombre alternativo del sujeto o campos específicos dentro del certificado se pueden usar como declaraciones de identidad, mientras que otros campos, como los campos Valid From y Valid To, especifican la validez del certificado.

Tipos de credenciales de transporte

La tabla siguiente muestra los posibles tipos de credenciales de cliente que pueden ser utilizadas por un enlace en modo de seguridad de transporte. Al crear un servicio, establezca la ClientCredentialType propiedad en uno de estos valores para especificar el tipo de credencial que el cliente debe proporcionar para comunicarse con el servicio. Puede establecer los tipos en archivos de código o de configuración.

Configuración Descripción
Ninguno Especifica que el cliente no necesita presentar ninguna credencial. Esto se traduce en un cliente anónimo.
Básico Especifica la autenticación básica para el cliente. Para obtener más información, consulte RFC2617: Autenticación HTTP: Autenticación básica e implícita.
Resumen Especifica la autenticación implícita para el cliente. Para obtener más información, consulte RFC2617: Autenticación HTTP: Autenticación básica e implícita.
Ntlm Especifica la autenticación NT LAN Manager (NTLM). Esto se usa cuando no se puede usar la autenticación Kerberos por algún motivo. También puede deshabilitar su uso como alternativa configurando la propiedad AllowNtlm a false, lo que hace que WCF intente a toda costa lanzar una excepción si se utiliza NTLM. Tenga en cuenta que establecer esta propiedad en false puede no impedir que las credenciales NTLM se envíen a través de la conexión.
Windows Especifica la autenticación de Windows. Para especificar únicamente el protocolo Kerberos en un dominio de Windows, ajuste la propiedad AllowNtlm a false (el valor predeterminado es true).
Certificado Realiza la autenticación de cliente mediante un certificado X.509.
Contraseña El usuario debe proporcionar un nombre de usuario y una contraseña. Valide el par de nombre de usuario y contraseña mediante la autenticación de Windows u otra solución personalizada.

Tipos de credenciales de cliente de mensaje

En la tabla siguiente se muestran los posibles tipos de credenciales que puede usar al crear una aplicación que use la seguridad de mensajes. Puede usar estos valores en archivos de código o de configuración.

Configuración Descripción
Ninguno Especifica que el cliente no necesita presentar una credencial. Esto se traduce en un cliente anónimo.
Windows Permite que los intercambios de mensajes SOAP se produzcan en el contexto de seguridad establecido con una credencial de Windows.
Nombre de usuario Permite al servicio requerir que el cliente se autentique con una credencial de nombre de usuario. Tenga en cuenta que WCF no permite ninguna operación criptográfica con nombres de usuario, como generar una firma o cifrar datos. WCF garantiza que el transporte esté protegido al usar credenciales de nombre de usuario.
Certificado Permite al servicio requerir que el cliente se autentique mediante un certificado X.509.
Token emitido Tipo de token personalizado configurado según una directiva de seguridad. El tipo de token predeterminado es Lenguaje de marcado de aserciones de seguridad (SAML). El token lo emite un servicio de token seguro. Para más información, consulte Federación y tokens emitidos.

Modelo de negociación de credenciales de servicio

La negociación es el proceso de establecer la confianza entre un cliente y un servicio intercambiando credenciales. El proceso se realiza de forma iterativa entre el cliente y el servicio, para revelar solo la información necesaria para el siguiente paso del proceso de negociación. En la práctica, el resultado final es la entrega de la credencial de un servicio al cliente que se usará en operaciones posteriores.

Con una excepción, de forma predeterminada, los enlaces proporcionados por el sistema en WCF negocian automáticamente la credencial de servicio cuando se usa la seguridad de nivel de mensaje. (La excepción es BasicHttpBinding, que no habilita la seguridad de forma predeterminada). Para deshabilitar este comportamiento, consulte las NegotiateServiceCredential propiedades y NegotiateServiceCredential .

Nota:

Cuando se usa la seguridad SSL con .NET Framework 3.5 y versiones posteriores, un cliente WCF usa los certificados intermedios en su almacén de certificados y los certificados intermedios recibidos durante la negociación SSL para realizar la validación de la cadena de certificados en el certificado del servicio. .NET Framework 3.0 solo usa los certificados intermedios instalados en el almacén de certificados local.

Negociación fuera de banda

Si se desactiva la negociación automática, las credenciales del servicio deben estar aprovisionadas en el cliente antes de enviar cualquier mensaje al servicio. Esto también se conoce como aprovisionamiento fuera de banda . Por ejemplo, si el tipo de credencial especificado es un certificado y la negociación automática está deshabilitada, el cliente debe ponerse en contacto con el propietario del servicio para recibir e instalar el certificado en el equipo que ejecuta la aplicación cliente. Esto se puede hacer, por ejemplo, cuando desea controlar estrictamente qué clientes pueden acceder a un servicio en un escenario de negocio a negocio. Esta negociación fuera de banda se puede llevar a cabo por correo electrónico y el certificado X.509 se almacena en el almacén de certificados de Windows mediante una herramienta como el complemento Certificados de Microsoft Management Console (MMC).

Nota:

La propiedad ClientCredentials se utiliza para proporcionar al servicio un certificado logrado a través de la negociación fuera de banda. Esto es necesario cuando se usa la BasicHttpBinding clase porque el enlace no permite la negociación automatizada. La propiedad también se utiliza en un escenario dúplex no correlacionado. Este es un escenario en el que un servidor envía un mensaje al cliente sin necesidad de que el cliente envíe primero una solicitud al servidor. Dado que el servidor no tiene una solicitud del cliente, debe usar el certificado del cliente para cifrar el mensaje en el cliente.

Establecer valores de credenciales

Una vez que seleccione un modo de seguridad, debe especificar las credenciales reales. Por ejemplo, si el tipo de credencial se establece en "certificado", debe asociar una credencial específica (como un certificado X.509 específico) con el servicio o el cliente.

Dependiendo de si está programando un servicio o un cliente, el método para establecer el valor de credencial difiere ligeramente.

Establecimiento de credenciales de servicio

Si usa el modo de transporte y usa HTTP como transporte, debe usar Internet Information Services (IIS) o configurar el puerto con un certificado. Para obtener más información, vea Información general sobre seguridad de transporte y Seguridad de transporte HTTP.

Para proporcionar un servicio con credenciales en código, cree una instancia de la clase ServiceHost y especifique la credencial adecuada utilizando la clase ServiceCredentials, a la cual se puede obtener acceso a través de la propiedad Credentials.

Establecimiento de un certificado

Para proporcionar un servicio con un certificado X.509 que utilizará para autenticar el servicio a los clientes, utilice el método SetCertificate de la clase X509CertificateRecipientServiceCredential.

Para aprovisionar un servicio con un certificado de cliente, use el SetCertificate método de la X509CertificateInitiatorServiceCredential clase .

Establecimiento de credenciales de Windows

Si el cliente especifica un nombre de usuario y una contraseña válidos, esa credencial se usa para autenticar al cliente. De lo contrario, se utilizan las credenciales del usuario actual que ha iniciado sesión.

Establecimiento de credenciales de cliente

En WCF, las aplicaciones cliente usan un cliente WCF para conectarse a los servicios. Cada cliente deriva de la ClientBase<TChannel> clase y la ClientCredentials propiedad del cliente permite la especificación de varios valores de credenciales de cliente.

Establecimiento de un certificado

Para aprovisionar un servicio con un certificado X.509 que se usa para autenticar al cliente en un servicio, use el SetCertificate método de la X509CertificateInitiatorClientCredential clase .

Cómo se usan las credenciales de cliente para autenticar un cliente en el servicio

La información de credenciales de cliente necesaria para comunicarse con un servicio se proporciona mediante la propiedad ClientCredentials o Credentials. El canal de seguridad usa esta información para autenticar al cliente en el servicio. La autenticación se realiza a través de uno de los dos modos:

  • Las credenciales de cliente se usan una vez antes de enviar el primer mensaje mediante la instancia de cliente WCF para establecer un contexto de seguridad. Todos los mensajes de aplicación se protegen a través del contexto de seguridad.

  • Las credenciales de cliente se usan para autenticar todos los mensajes de aplicación enviados al servicio. En este caso, no se establece ningún contexto entre el cliente y el servicio.

No se pueden cambiar las identidades establecidas

Cuando se usa el primer método, el contexto establecido se asocia permanentemente a la identidad del cliente. Es decir, una vez establecido el contexto de seguridad, no se puede cambiar la identidad asociada al cliente.

Importante

Existe una situación que se debe tener en cuenta cuando no se puede cambiar la identidad (es decir, cuando el contexto de seguridad está activado, el comportamiento predeterminado). Si crea un servicio que se comunica con un segundo servicio, no se puede cambiar la identidad utilizada para abrir el cliente WCF al segundo servicio. Esto se convierte en un problema si se permite que varios clientes usen el primer servicio y el servicio suplanta a los clientes al acceder al segundo servicio. Si el servicio reutiliza el mismo cliente para todos los autores de llamadas, todas las llamadas al segundo servicio se realizan bajo la identidad del primer llamador que se usó para abrir el cliente al segundo servicio. En otras palabras, el servicio usa la identidad del primer cliente para que todos sus clientes se comuniquen con el segundo servicio. Esto puede conducir a la elevación de privilegios. Si este no es el comportamiento deseado del servicio, debe realizar un seguimiento de cada llamador y crear un nuevo cliente en el segundo servicio para cada llamador distinto y asegurarse de que el servicio usa solo el cliente adecuado para que el autor de la llamada adecuada se comunique con el segundo servicio.

Para obtener más información sobre las credenciales y las sesiones seguras, consulte Consideraciones de seguridad para sesiones seguras.

Consulte también