Cómo: Especificar los valores de credenciales de cliente
Con Windows Communication Foundation (WCF), puede especificar cómo un cliente se autentica al servicio. Por ejemplo, puede estipular que el cliente se autentique al servicio con un certificado. Este ejemplo establece el modo de seguridad en transporte y establece el tipo de credencial de cliente en certificado.
El proceso se desarrolla en tres partes:
- El programador del servicio especifica el tipo de credencial que el cliente debe proporcionar.
- El programador del cliente utiliza ServiceModel Metadata Utility Tool (Svcutil.exe) para consultar sus metadatos (código de cliente del servicio y archivo de configuración) en el servicio.
- El programador del cliente crea la aplicación cliente y proporciona un valor de credencial, en el código o en la configuración, que coincide con el tipo de credencial, como se estipula en los metadatos.
Código del servicio
Para especificar el tipo de credencial de cliente en el servicio en código
Agregue las referencias siguientes a su código.
Cree una instancia de un enlace. Este ejemplo utiliza NetTcpBinding.
Establezca el modo de seguridad, según corresponda. Este ejemplo establece el modo en Transport.
Establezca ClientCredentialType en una credencial, según corresponda. Este ejemplo establece el tipo en un certificado.
Cree una instancia de ServiceHost utilizando su tipo de servicio en el constructor. Por motivos de simplicidad, el código para mostrar la interfaz de servicio y su implementación no se muestra aquí.
Establezca el valor de credencial para el servicio. Este ejemplo utiliza el método SetCertificate de la clase X509CertificateRecipientServiceCredential.
Para especificar el tipo de credencial de cliente en el servicio en configuración
Agregue un enlace apropiado al elemento
<bindings>
. Este ejemplo utiliza <netTcpBinding Element>.Agregue <security> of <netTcpBinding> al enlace. Asegúrese de establecer el atributo
name
necesario en un valor adecuado.Establezca el atributo
mode
en un valor adecuado. Este ejemplo utiliza el modo"Message"
.Agregue un transporte o elemento de mensaje, según corresponda, al enlace de seguridad. Este ejemplo utiliza <message> element of <netTcpBinding>.
Establezca el atributo
clientCredential
en el tipo de credencial deseado. Este ejemplo utiliza"Certificate"
.<bindings> <netTcpBinding> <binding name="TcpBindingWithCredential"> <security mode="Message"> <message clientCredentialType="Certificate" /> </security> </binding> </netTcpBinding> </bindings>
Al crear el elemento de extremo, utilice el valor de atributo
bindingConfiguration
para especificar la configuración de enlace, como se muestra en el código siguiente.<endpoint address="myEndpointAddress" binding="netTcpBinding" bindingConfiguration="TcpBindingWithCredential" name="netTcpBinding_ICalculator" contract="Microsoft.ServiceModel.Samples.ICalculator" />
Código de cliente
Los procedimientos siguientes muestran cómo establecer el valor de credencial de cliente en el cliente en código y configuración. Esto presupone que ha utilizado ServiceModel Metadata Utility Tool (Svcutil.exe) para devolver los metadatos (código y configuración) del servicio. Para obtener más información, consulte Creación de un cliente de Windows Communication Foundation.
Para especificar el valor de credencial de cliente en el cliente en código
Utilice ServiceModel Metadata Utility Tool (Svcutil.exe) para generar código y configuración del servicio.
Cree una instancia del cliente WCF utilizando el código generado.
En la clase de cliente, establezca la propiedad ClientCredentials de la clase ClientBase en un valor adecuado. Este ejemplo establece la propiedad en un certificado X.509 utilizando el método SetCertificate de la clase X509CertificateInitiatorClientCredential.
Puede utilizar cualquiera de las enumeraciones de la clase X509FindType. El nombre de sujeto se utiliza aquí en caso de que se cambie el certificado (debido a una fecha de caducidad). Utilizar el nombre de sujeto permite a la infraestructura encontrar de nuevo el certificado.
Para especificar el valor de credencial de cliente en el cliente en configuración
Agregue un elemento <behavior> of <endpointBehaviors> al elemento <behaviors>.
Agregue un elemento <serviceCredentials> al elemento <behaviors>. Asegúrese de establecer el atributo
name
necesario en un valor adecuado.Agregue un elemento <clientCertificate> of <serviceCredentials> al elemento <clientCredentials>.
Establezca los atributos siguientes en los valores adecuados:
storeLocation
,storeName
,x509FindType
yfindValue
, como se muestra en el código siguiente. Para los certificados Para obtener más información acerca de , vea Trabajar con certificados.<behaviors> <endpointBehaviors> <behavior name="endpointCredential"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
Al configurar el cliente, especifique el comportamiento estableciendo el atributo
behaviorConfiguration
del elemento<endpoint>
, como se muestra en el código siguiente. El elemento del extremo es un elemento secundario del elemento <client>. Especifique también el nombre de la configuración de enlace estableciendo el atributobindingConfiguration
en el enlace para el cliente. Si está utilizando un archivo de configuración generado, se genera automáticamente el nombre del enlace. En este ejemplo, el nombre es"tcpBindingWithCredential"
.<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="credentialBehavior" /> </client>
Consulte también
Tareas
Creación de un cliente de Windows Communication Foundation
Referencia
NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential
Conceptos
Programación de la seguridad de WCF
Selección de tipos de credenciales
Trabajar con certificados
Otros recursos
ServiceModel Metadata Utility Tool (Svcutil.exe)
<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>