Procedimiento para especificar las credenciales de seguridad de los canales
El moniker del servicio Windows Communication Foundation (WCF) permite que las aplicaciones COM llamen a 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.
En este artículo se usará el servicio WCF definido en el ejemplo de seguridad de mensaje.
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 punto de conexión del archivo App.config del servicio.Compile el ejemplo de seguridad del mensaje y ejecute Service.exe. Busque el URI del servicio (
http://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=http://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=http://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). SetClientCertificateFromFile(String, String, String) o SetClientCertificateFromStoreByName(String, String, String) también se puede usar en lugar de SetClientCertificateFromStore(String, String, String, Object) para establecer el certificado de 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=http://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=http://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(String, String).
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=http://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=http://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 solo se usan en aplicaciones que utilizan la seguridad federada. Para obtener más información sobre la seguridad federada, consulte Federación y tokens emitidos y Ejemplo de federación.
El siguiente ejemplo de código de Visual Basic ilustra cómo llamar al método SetIssuedToken(String, String, String).
monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl" monString = monString + ", address=http://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(String, String, String).