Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Es posible tener un esquema de seguridad personalizado que requiera más de una credencial. Por ejemplo, un servicio puede solicitar del cliente un nombre de usuario y contraseña, pero también una credencial que demuestre que el cliente tiene más de 18 años. La segunda credencial es una credencial de apoyo. En este tema, se explica cómo implementar dichos credenciales en un cliente Windows Communication Foundation (WCF).
![]() |
---|
La especificación para admitir las credenciales forma parte de la especificación WS-SecurityPolicy. Para obtener más información, vea Especificaciones de seguridad de servicios Web. |
Tokens admitidos
En resumen, al usar el modo de seguridad, una credencial primaria siempre se usa para proteger el mensaje (por ejemplo, un certificado X.509 o un vale Kerberos).
Como ha definido la especificación, un enlace de seguridad utiliza tokens para proteger el intercambio de mensajes. Un token es una representación de una credencial de seguridad.
El enlace de seguridad utiliza un testigo primario identificado en la directiva de enlace de seguridad para crear una firma. Esta firma se conoce como la firma del mensaje.
Los tokens adicionales se pueden especificar para aumentar las notificaciones proporcionadas por el token asociado a la firma del mensaje.
Endosar, firmar y cifrar
Una credencial de aprobación produce como resultado un token de aprobación transmitido dentro del mensaje. La especificación de WS-SecurityPolicy define cuatro maneras de adjuntar un token de aprobación al mensaje, tal y como se describe en la tabla siguiente.
Propósito | Descripción |
---|---|
Firmado |
El token de aprobación está incluido en el encabezado de seguridad y es firmado por la firma del mensaje. |
Endosar |
Un token endosado firma la firma del mensaje. |
Firmar y endosar |
Los tokens firmados y endosados firman el elemento ds:Signature completo generado a partir de la firma del mensaje y están firmados por esa firma del mensaje; es decir, ambos tokens (el token utilizado para la firma del mensaje y el token endosado y firmado) se firman entre sí. |
Firmar y cifrar |
Los tokens de aprobación firmados y cifrados son tokens de aprobación firmados que también se cifran cuando aparecen en wsse:SecurityHeader. |
Programar credenciales de aprobación
Para crear un servicio que utiliza los tokens de aprobación, usted debe crear customBinding Element. (Para obtener más información, vea Cómo: Crear un enlace personalizado mediante SecurityBindingElement.)
El primer paso cuando se crea un enlace personalizado es crear un elemento de enlace de seguridad, que puede ser uno de tres tipos:
Todas las clases heredan del SecurityBindingElement, que incluye cuatro propiedades pertinentes:
Ámbitos
Existen dos ámbitos para admitir las credenciales:
Los tokens de compatibilidad con extremo admiten todas las operaciones de un extremo. Es decir, se puede utilizar la credencial que el token de aprobación representa siempre que se invoca una operación de extremo.
Los tokens de aprobación de la operación admiten solo una operación de extremo concreta.
Tal y como han indicado los nombres de la propiedad, se puede requerir las credenciales de aprobación o estas pueden ser opcionales. Es decir, si la credencial de aprobación se utiliza si está presente, aunque no es necesario, pero no se producirá un error en la autenticación si no está presente.
Procedimientos
Para crear un enlace personalizado que incluye credenciales de aprobación
Crear un elemento de enlace de seguridad. El ejemplo siguiente crea SymmetricSecurityBindingElement con el modo de autenticación UserNameForCertificate. Utilice el método CreateUserNameForCertificateBindingElement.
Agregue el parámetro de aprobación a la colección de tipos devuelta por la propiedad adecuada (Endorsing, Signed, SignedEncryptedo SignedEndorsed). Los tipos en el espacio de nombres System.ServiceModel.Security.Tokens incluyen tipos utilizados normalmente, como X509SecurityTokenParameters.
Ejemplo
Descripción
En el ejemplo siguiente se crea una instancia deSymmetricSecurityBindingElement y agrega una instancia de la clase KerberosSecurityTokenParameters a la colección que ha devuelto la propiedad endosada.
Código
public static Binding CreateMultiFactorAuthenticationBinding()
{
HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();
// The message security binding element will be configured to require 2 tokens:
// 1) A user name/password encrypted with the service token.
// 2) A client certificate used to sign the message.
// Instantiate a binding element that will require the user name/password token
// in the message (encrypted with the server certificate).
SymmetricSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
// Create supporting token parameters for the client X.509 certificate.
X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
// Specify that the supporting token is passed in the message send by the client to the service.
clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
// Turn off derived keys.
clientX509SupportingTokenParameters.RequireDerivedKeys = false;
// Augment the binding element to require the client's X.509 certificate as an
// endorsing token in the message.
messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);
// Create a CustomBinding based on the constructed security binding element.
return new CustomBinding(messageSecurity, httpTransport);
}
Vea también
Conceptos
Cómo: Crear un enlace personalizado mediante SecurityBindingElement