Vorgehensweise: Angeben von Anmeldeinformationen für KanalsicherheitHow to: Specify Channel Security Credentials

Der Windows Communication Foundation (WCF)-Dienstmoniker ermöglicht COM-Anwendungen das Aufrufen von WCF-Dienste.The Windows Communication Foundation (WCF) Service Moniker allows COM applications to call WCF services. Die meisten WCF-Dienste erfordern der Client das Angeben von Anmeldeinformationen zur Authentifizierung und Autorisierung.Most WCF services require the client to specify credentials for authentication and authorization. Beim Aufrufen eines WCF-Diensts von einem WCF-Client können Sie diese Anmeldeinformationen in verwaltetem Code oder in einer Anwendungskonfigurationsdatei angeben.When calling a WCF service from a WCF client, you can specify these credentials in managed code or in an application configuration file. Wenn einen WCF-Dienst aus einer COM-Anwendung aufrufen, können Sie die IChannelCredentials Schnittstelle, um die Anmeldeinformationen angeben.When calling a WCF service from a COM application, you can use the IChannelCredentials interface to specify credentials. In diesem Thema werden verschiedene Möglichkeiten zur Angabe von Anmeldeinformationen mithilfe der IChannelCredentials-Schnittstelle erläutert.This topic will illustrate various ways to specify credentials using the IChannelCredentials interface.

Hinweis

IChannelCredentials ist eine IDispatch-basierte Schnittstelle, und Sie erhalten keine IntelliSense-Funktionen in der Visual Studio-Umgebung.IChannelCredentials is an IDispatch-based interface and you will not get IntelliSense functionality in the Visual Studio environment.

In diesem Artikel verwendet den WCF-Dienst definiert, der Nachrichtensicherheitsbeispiel.This article will use the WCF service defined in the Message Security Sample.

So geben Sie ein Clientzertifikat an:To specify a client certificate

  1. Führen Sie die Datei Setup.bat im Nachrichtensicherheitsverzeichnis aus, um die erforderlichen Testzertifikate zu erstellen und zu installieren.Run the Setup.bat file in the Message Security directory to create and install the required test certificates.

  2. Öffnen Sie das Nachrichtensicherheitsprojekt.Open the Message Security project.

  3. Hinzufügen [ServiceBehavior(Namespace=``http://Microsoft.ServiceModel.Samples``)] auf die ICalculator Schnittstellendefinition.Add [ServiceBehavior(Namespace=``http://Microsoft.ServiceModel.Samples``)] to the ICalculator interface definition.

  4. Hinzufügen bindingNamespace=``http://Microsoft.ServiceModel.Samples dem endpunkttag in der Datei App.config für den Dienst.Add bindingNamespace=``http://Microsoft.ServiceModel.Samples to the endpoint tag in the App.config for the service.

  5. Erstellen Sie das Nachrichtensicherheitsbeispiel, und führen Sie Service.exe aus.Build the Message Security Sample and run Service.exe. Verwenden Sie Internet Explorer, und navigieren Sie zum URI des Diensts (http://localhost:8000/ServiceModelSamples/Service) um sicherzustellen, dass der Dienst funktioniert.Use Internet Explorer and browse to the service's URI (http://localhost:8000/ServiceModelSamples/Service) to ensure that the service is working.

  6. Öffnen Sie Visual Basic 6.0, und erstellen Sie eine neue Standard-EXE-Datei.Open Visual Basic 6.0 and create a new Standard .exe file. Fügen Sie dem Formular eine Schaltfläche hinzu, und doppelklicken Sie darauf, um dem Click-Handler den folgenden Code hinzuzufügen.Add a button to the form and double-click the button to add the following code to the Click handler:

        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)  
    
  7. Führen Sie die Visual Basic-Anwendung aus, und überprüfen Sie die Ergebnisse.Run the Visual Basic application and verify the results.

    Die Visual Basic-Anwendung zeigt ein Meldungsfeld mit dem Ergebnis des Aufrufs von Add(3, 4) an.The Visual Basic application will display a message box with the result from calling Add(3, 4). SetClientCertificateFromFile(String, String, String) oder SetClientCertificateFromStoreByName(String, String, String) können anstelle von SetClientCertificateFromStore(String, String, String, Object) verwendet werden, um das Clientzertifikat festzulegen:SetClientCertificateFromFile(String, String, String) or SetClientCertificateFromStoreByName(String, String, String) can also be used in place of SetClientCertificateFromStore(String, String, String, Object) to set the Client Certificate:

    monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"  
    

Hinweis

Damit dieser Aufruf funktioniert, muss das Clientzertifikat auf dem Computer, auf dem der Client ausgeführt wird, als vertrauenswürdig eingestuft sein.For this call to work, the client certificate needs to be trusted on the machine the client is running on.

Hinweis

Ist der Moniker nicht ordnungsgemäß formatiert oder der Dienst nicht verfügbar, wird nach dem GetObject-Aufruf ein Syntaxfehler zurückgegeben.If the moniker is malformed or if the service is unavailable, the call to GetObject will return an error saying "Invalid Syntax." Vergewissern Sie sich bei Auftreten dieses Fehlers, dass der verwendete Moniker korrekt und der Dienst verfügbar ist.If you receive this error, make sure the moniker you are using is correct and the service is available.

So geben Sie einen Benutzernamen und ein Kennwort an:To specify user name and password

  1. Ändern Sie die Datei Service App.config, um wsHttpBinding zu verwenden.Modify the Service App.config file to use the wsHttpBinding. Dies ist für die Validierung von Benutzername und Kennwort erforderlich:This is required for user name and password validation:

  2. Legen Sie clientCredentialType auf UserName fest:Set the clientCredentialType to UserName:

  3. Öffnen Sie Visual Basic 6.0, und erstellen Sie eine neue Standard-EXE-Datei.Open Visual Basic 6.0 and create a new Standard .exe file. Fügen Sie dem Formular eine Schaltfläche hinzu, und doppelklicken Sie darauf, um dem Click-Handler den folgenden Code hinzuzufügen.Add a button to the form and double-click the button to add the following code to the Click handler:

    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)  
    
  4. Führen Sie die Visual Basic-Anwendung aus, und überprüfen Sie die Ergebnisse.Run the Visual Basic application and verify the results. Die Visual Basic-Anwendung zeigt ein Meldungsfeld mit dem Ergebnis des Aufrufs von Add(3, 4) an.The Visual Basic application will display a message box with the result from calling Add(3, 4).

    Hinweis

    Die im Dienstmoniker in diesem Beispiel angegebene Bindung wurde in WSHttpBinding_ICalculator geändert.The binding specified in the service moniker in this sample has been changed to WSHttpBinding_ICalculator. Zudem müssen beim Aufruf von SetUserNameCredential(String, String) ein gültiger Benutzername und ein Kennwort angegeben werden.Also note that you must supply a valid user name and password in the call to SetUserNameCredential(String, String).

So geben Sie Windows-Anmeldeinformationen an:To specify Windows Credentials

  1. Legen Sie clientCredentialType in der Datei Service App.config auf Windows fest:Set clientCredentialType to Windows in the Service App.config file:

  2. Öffnen Sie Visual Basic 6.0, und erstellen Sie eine neue Standard-EXE-Datei.Open Visual Basic 6.0 and create a new Standard .exe file. Fügen Sie dem Formular eine Schaltfläche hinzu, und doppelklicken Sie darauf, um dem Click-Handler den folgenden Code hinzuzufügen.Add a button to the form and double-click the button to add the following code to the Click handler:

    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)  
    
  3. Führen Sie die Visual Basic-Anwendung aus, und überprüfen Sie die Ergebnisse.Run the Visual Basic application and verify the results. Die Visual Basic-Anwendung zeigt ein Meldungsfeld mit dem Ergebnis des Aufrufs von Add(3, 4) an.The Visual Basic application will display a message box with the result from calling Add(3, 4).

    Hinweis

    "Domäne", "Benutzer-ID" und "Kennwort" müssen durch gültige Werte ersetzt werden.You must replace "domain", "userID", and "password" with valid values.

So geben Sie ein Problemtoken an:To specify an issue token

  1. Problemtoken werden nur für Anwendungen, die verbundene Sicherheit verwenden, eingesetzt.Issue tokens are used only for applications using federated security. Weitere Informationen zu verbundene Sicherheit, finden Sie unter Verbund und ausgestellte Token und Verbundbeispiel.For more information about federated security, see Federation and Issued Tokens and Federation Sample.

    Im folgenden Visual Basic-Codebeispiel wird veranschaulicht, wie die SetIssuedToken(String, String, String)-Methode aufgerufen wird:The following Visual Basic code example illustrates how to call the SetIssuedToken(String, String, String) method:

        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")  
    

    Weiter Informationen zu den Parametern für diese Methode finden Sie unter SetIssuedToken(String, String, String).For more information about the parameters for this method, see SetIssuedToken(String, String, String).

Siehe auchSee Also

VerbundFederation
Vorgehensweise: Konfigurieren von Anmeldeinformationen für einen VerbunddienstHow to: Configure Credentials on a Federation Service
Vorgehensweise: Erstellen eines VerbundclientsHow to: Create a Federated Client
NachrichtensicherheitMessage Security
Bindungen und SicherheitBindings and Security