Procédure : spécifier des informations d’identification de sécurité de canal
Le moniker de service Windows Communication Foundation (WCF) permet aux applications COM d’appeler des services WCF. La plupart des services WCF requièrent que le client spécifie des informations d’identification pour l’authentification et l’autorisation. Lorsque vous appelez un service WCF d’un client WCF, vous pouvez spécifier ces informations d’identification en code managé ou dans un fichier de configuration de l’application. Lorsque vous appelez un service WCF depuis une application COM, vous pouvez utiliser l’interface IChannelCredentials pour spécifier les informations d’identification. Cette rubrique illustre diverses méthodes pour spécifier des informations d'identification à l'aide de l'interface IChannelCredentials.
Notes
IChannelCredentials est une interface basée sur IDispatch et vous ne rencontrerez pas de fonctionnalités IntelliSense dans l'environnement Visual Studio.
Cet article utilise le service WCF défini dans l’exemple de sécurité des messages.
Pour spécifier un certificat client
Exécutez le fichier Setup.bat dans le répertoire de la sécurité de message pour créer et installer les certificats de test requis.
Ouvrez le projet de la sécurité de message.
Ajoutez
[ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")]
à la définition d’interfaceICalculator
.Ajoutez
bindingNamespace="http://Microsoft.ServiceModel.Samples"
à l’étiquette de point de terminaison dans le fichier App.config du service.Générez l'exemple de la sécurité de message et exécutez Service.exe. Accédez à l’URI du service (
http://localhost:8000/ServiceModelSamples/Service
) pour vérifier que le service fonctionne.Ouvrez Visual Basic 6.0 et créez un nouveau fichier .exe standard. Ajoutez un bouton au formulaire et double-cliquez dessus pour ajouter le code suivant au gestionnaire Click :
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)
Exécutez l'application Visual Basic et vérifiez les résultats.
L'application Visual Basic affiche un message contenant le résultat de l'appel Add(3, 4). l'SetClientCertificateFromFile(String, String, String) ou SetClientCertificateFromStoreByName(String, String, String) peut également être utilisé à la place de SetClientCertificateFromStore(String, String, String, Object) pour définir le certificat client :
monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"
Notes
Pour que fonctionne cet appel, le certificat client doit être approuvé sur l'ordinateur qui exécute le client.
Notes
Si le moniker est mal formé ou si le service n’est pas disponible, l’appel à GetObject
retourne une erreur indiquant que la syntaxe n’est pas valide. Si vous recevez cette erreur, assurez-vous que le moniker que vous utilisez est correct et que le service est disponible.
Pour spécifier un nom d'utilisateur et un mot de passe
Modifiez le fichier App.config du service pour utiliser
wsHttpBinding
. Il est requis pour la validation du nom d’utilisateur et du mot de passe :Affectez
clientCredentialType
à UserName :Ouvrez Visual Basic 6.0 et créez un nouveau fichier .exe standard. Ajoutez un bouton au formulaire et double-cliquez dessus pour ajouter le code suivant au gestionnaire Click :
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)
Exécutez l'application Visual Basic et vérifiez les résultats. L'application Visual Basic affiche un message contenant le résultat de l'appel Add(3, 4).
Notes
La liaison spécifiée dans le moniker de service dans cet exemple a été remplacée par WSHttpBinding_ICalculator. Notez aussi que vous devez fournir un nom d'utilisateur et un mot de passe valides dans l'appel à SetUserNameCredential(String, String).
Pour spécifier des informations d'identification Windows
Affectez
clientCredentialType
à Windows dans le fichier App.config de service :Ouvrez Visual Basic 6.0 et créez un nouveau fichier .exe standard. Ajoutez un bouton au formulaire et double-cliquez dessus pour ajouter le code suivant au gestionnaire Click :
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)
Exécutez l'application Visual Basic et vérifiez les résultats. L'application Visual Basic affiche un message contenant le résultat de l'appel Add(3, 4).
Notes
Vous devez remplacer "domain", "userID" et "password" par des valeurs valides.
Pour spécifier un jeton d'émission
Ces jetons sont utilisés uniquement pour les applications qui utilisent la sécurité fédérée. Pour plus d’informations sur la sécurité fédérée, consultez Fédération et jetons émis et Exemple de fédération.
L'exemple de code Visual Basic suivant montre comment appeler la méthode 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")
Pour plus d'informations sur les paramètres de cette méthode, consultez SetIssuedToken(String, String, String).