Comment : spécifier des informations d'identification pour la sécurité des canaux

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.

ms735113.note(fr-fr,VS.90).gifRemarque :
IChannelCredentials est une interface basée sur IDispatch et vous ne rencontrerez pas de fonctionnalités IntelliSense dans l'environnement Visual Studio.

Cet article fait appel au service WCF défini dans Message Security Sample.

Pour spécifier un certificat client

  1. 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.

  2. Ouvrez le projet de la sécurité de message.

  3. Ajoutez [ServiceBehavior(Namespace=``http://Microsoft.ServiceModel.Samples``)] à la définition d'interface ICalculator.

  4. Ajoutez bindingNamespace=``http://Microsoft.ServiceModel.Samples à la balise de point de terminaison dans le fichier App.config du service.

  5. Générez l'exemple de la sécurité de message et exécutez Service.exe. Utilisez Internet Explorer et naviguez jusqu'à l'URI du service (https://localhost:8000/ServiceModelSamples/Service) pour vérifier que le service fonctionne.

  6. 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=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)
    
  7. 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). SetClientCertificateFromFile ou SetClientCertificateFromStoreByName peut également être utilisé à la place de SetClientCertificateFromStore pour définir le certificat client :

    monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"
    
ms735113.note(fr-fr,VS.90).gifRemarque :
Pour que fonctionne cet appel, le certificat client doit être approuvé sur l'ordinateur qui exécute le client.

ms735113.note(fr-fr,VS.90).gifRemarque :
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

  1. 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 :

  2. Affectez clientCredentialType à UserName :

  3. 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=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)
    
  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).

    ms735113.note(fr-fr,VS.90).gifRemarque :
    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.

Pour spécifier des informations d'identification Windows

  1. Affectez clientCredentialType à Windows dans le fichier App.config de service :

  2. 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=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)
    
  3. 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).

    ms735113.note(fr-fr,VS.90).gifRemarque :
    Vous devez remplacer "domain", "userID" et "password" par des valeurs valides.

Pour spécifier un jeton d'émission

  1. 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 Federation Sample.

    L'exemple de code Visual Basic suivant montre comment appeler la méthode 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")
    

    Pour plus d'informations sur les paramètres de cette méthode, consultez SetIssuedToken.

Voir aussi

Tâches

Comment : configurer des informations d'identification sur un service FS (Federation Service)
Comment : créer un client fédéré

Concepts

Fédération
Sécurité des messages dans WCF
Liaisons et sécurité