Cómo especificar las credenciales de seguridad de los canales
El moniker de servicio Windows Communication Foundation (WCF) permite a las aplicaciones COM llamar a los servicios WCF. La mayoría de los servicios WCF exigen al cliente que especifique las credenciales para la autenticación y autorización. Al llamar a un servicio WCF desde un cliente WCF, pueden especificarse estas credenciales en código administrado o en un archivo de configuración de la aplicación. Al llamar a un servicio WCF desde una aplicación COM, puede utilizarse la interfaz IChannelCredentials para especificar las credenciales. Este tema describe varias maneras de especificar credenciales mediante la interfaz IChannelCredentials.
Nota
IChannelCredentials es una interfaz basada en IDispatch y no se obtiene la funcionalidad IntelliSense en el entorno de Visual Studio.
Este artículo utilizará el servicio WCF definido en Message Security Sample.
Para especificar un certificado de cliente
Ejecute el archivo Setup.bat en el directorio de seguridad del mensaje para crear e instalar los certificados de prueba necesarios.
Abra el proyecto de seguridad del mensaje.
Agregue
[ServiceBehavior(Namespace=``http://Microsoft.ServiceModel.Samples``)]
a la definición de la interfazICalculator
.Agregue
bindingNamespace=``http://Microsoft.ServiceModel.Samples
a la etiqueta del extremo del archivo App.config del servicio.Genere el ejemplo de seguridad del mensaje y ejecute Service.exe. Utilice Internet Explorer y vaya a la dirección URI del servicio (https://localhost:8000/ServiceModelSamples/Service) para asegurarse de que el servicio está funcionando.
Abra Visual Basic 6.0 y cree un nuevo archivo .exe estándar. Agregue un botón al formulario y haga doble clic en él para agregar el código siguiente al controlador de clic:
monString = "service:mexAddress=https://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=https://localhost:8000/ServiceModelSamples/Service" monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples" monString = monString + ", binding=BasicHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples" Set monikerProxy = GetObject(monString) 'Set the Service Certificate. monikerProxy.ChannelCredentials.SetServiceCertificateAuthentication "CurrentUser", "NoCheck", "PeerOrChainTrust" monikerProxy.ChannelCredentials.SetDefaultServiceCertificateFromStore "CurrentUser", "TrustedPeople", "FindBySubjectName", "localhost" 'Set the Client Certificate. monikerProxy.ChannelCredentials.SetClientCertificateFromStoreByName "CN=client.com", "CurrentUser", "My" MsgBox monikerProxy.Add(3, 4)
Ejecute la aplicación Visual Basic y compruebe los resultados.
La aplicación Visual Basic mostrará un cuadro de mensaje con el resultado de la llamada a Add(3, 4). También puede utilizarse SetClientCertificateFromFile o SetClientCertificateFromStoreByName, en lugar de SetClientCertificateFromStore, para establecer el certificado del cliente:
monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"
Nota
Para que esta llamada funcione, es necesario que el equipo en el que se ejecuta el cliente confíe en el certificado del cliente.
Nota
Si el moniker es incorrecto o si el servicio no está disponible, la llamada a GetObject devolverá un error que dirá "Sintaxis no válida." Si recibe este error, asegúrese de que el moniker que está utilizando es correcto y el servicio está disponible.
Para especificar un nombre de usuario y una contraseña.
Modifique el archivo de servicio App.config para utilizar wsHttpBinding. Este paso es necesario para la validación del nombre de usuario y la contraseña:
Establezca clientCredentialType en UserName:
Abra Visual Basic 6.0 y cree un nuevo archivo .exe estándar. Agregue un botón al formulario y haga doble clic en él para agregar el código siguiente al controlador de clic:
monString = "service:mexAddress=https://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=https://localhost:8000/ServiceModelSamples/Service" monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples" monString = monString + ", binding=WSHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples" Set monikerProxy = GetObject(monString) monikerProxy.ChannelCredentials.SetServiceCertificateAuthentication "CurrentUser", "NoCheck", "PeerOrChainTrust" monikerProxy.ChannelCredentials.SetUserNameCredential "username", "password" MsgBox monikerProxy.Add(3, 4)
Ejecute la aplicación Visual Basic y compruebe los resultados. La aplicación Visual Basic mostrará un cuadro de mensaje con el resultado de la llamada a Add(3, 4).
Nota
El enlace especificado en el moniker de servicio de este ejemplo se ha cambiado a WSHttpBinding_ICalculator. Tenga en cuenta también que debe proporcionar un nombre de usuario y contraseña validos en la llamada a SetUserNameCredential.
Para especificar las credenciales de Windows
Establezca clientCredentialType en Windows en el archivo de servicio App.config:
Abra Visual Basic 6.0 y cree un nuevo archivo .exe estándar. Agregue un botón al formulario y haga doble clic en él para agregar el código siguiente al controlador de clic:
monString = "service:mexAddress=https://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=https://localhost:8000/ServiceModelSamples/Service" monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples" monString = monString + ", binding=WSHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples" monString = monString + ", upnidentity=domain\userID" Set monikerProxy = GetObject(monString) monikerProxy.ChannelCredentials.SetWindowsCredential "domain", "userID", "password", 1, True MsgBox monikerProxy.Add(3, 4)
Ejecute la aplicación Visual Basic y compruebe los resultados. La aplicación Visual Basic mostrará un cuadro de mensaje con el resultado de la llamada a Add(3, 4).
Nota
Reemplazar "dominio", "identificación de usuario" y "contraseña" con valores válidos.
Especificar la emisión de un token
Los tokens de problema sólo se usan en aplicaciones que utilizan la seguridad federada. Para obtener más información acerca de la seguridad federada, vea Federación y tokens emitidos y Federation Sample.
El siguiente ejemplo de código de Visual Basic ilustra cómo llamar al método SetIssuedToken.
monString = "service:mexAddress=https://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=https://localhost:8000/SomeService/Service" monString = monString + ", contract=ICalculator, contractNamespace=http://SomeService.Samples" monString = monString + ", binding=WSHttpBinding_ISomeContract, bindingNamespace=http://SomeService.Samples" Set monikerProxy = GetObject(monString) monikerProxy.SetIssuedToken("http://somemachine/sts", "bindingType", "binding")
Para obtener información acerca de los parámetros de este método, vea SetIssuedToken.
Consulte también
Tareas
Cómo: Configurar las credenciales en un servicio de federación
Cómo crear un cliente federado
Conceptos
Federación
Seguridad de los mensajes en WCF
Enlaces y seguridad