Vorgehensweise: Angeben von Anmeldeinformationen für Kanalsicherheit
Der Windows Communication Foundation-Dienstmoniker (WCF) ermöglicht COM-Anwendungen das Aufrufen von WCF-Diensten. Die meisten WCF-Dienste fordern vom Client die Angabe von Anmeldeinformationen für Authentifizierung und Autorisierung. Beim Aufrufen eines WCF-Diensts von einem WCF-Client können diese Anmeldeinformationen in verwaltetem Code oder in einer Anwendungskonfigurationsdatei angegeben werden. Beim Aufrufen eines WCF-Diensts von einer COM-Anwendung kann die IChannelCredentials-Schnittstelle zum Angeben von Anmeldeinformationen verwendet werden. In diesem Thema werden verschiedene Möglichkeiten zur Angabe von Anmeldeinformationen mithilfe der IChannelCredentials-Schnittstelle erläutert.
Hinweis
IChannelCredentials ist eine IDispatch-basierte Schnittstelle, und Sie erhalten keine IntelliSense-Funktionen in der Visual Studio-Umgebung.
In diesem Artikel wird der WCF-Dienst verwendet, der im Nachrichtensicherheitsbeispieldefiniert ist.
So geben Sie ein Clientzertifikat an:
Führen Sie die Datei Setup.bat im Nachrichtensicherheitsverzeichnis aus, um die erforderlichen Testzertifikate zu erstellen und zu installieren.
Öffnen Sie das Nachrichtensicherheitsprojekt.
Fügen Sie
[ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")]
derICalculator
-Schnittstellendefinition hinzu.Fügen Sie
bindingNamespace="http://Microsoft.ServiceModel.Samples"
dem Endpunkttag in der App.config-Datei für den Dienst hinzu.Erstellen Sie das Nachrichtensicherheitsbeispiel, und führen Sie Service.exe aus. Navigieren Sie zum URI des Diensts (
http://localhost:8000/ServiceModelSamples/Service
), um sicherzustellen, dass der Dienst funktioniert.Öffnen Sie Visual Basic 6.0, und erstellen Sie eine neue Standard-EXE-Datei. Fügen Sie dem Formular eine Schaltfläche hinzu, und doppelklicken Sie darauf, um dem Click-Handler den folgenden Code hinzuzufügen.
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)
Führen Sie die Visual Basic-Anwendung aus, und überprüfen Sie die Ergebnisse.
Die Visual Basic-Anwendung zeigt ein Meldungsfeld mit dem Ergebnis des Aufrufs von Add(3, 4) an. SetClientCertificateFromFile(String, String, String) oder SetClientCertificateFromStoreByName(String, String, String) können anstelle von SetClientCertificateFromStore(String, String, String, Object) verwendet werden, um das Clientzertifikat festzulegen:
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.
Hinweis
Wenn der Moniker nicht wohlgeformt oder der Dienst nicht verfügbar ist, gibt der Aufruf von GetObject
einen Fehler zurück, der auf eine „Ungültige Syntax“ hinweist. Wenn Sie diese Fehlermeldung erhalten, stellen Sie sicher, dass der verwendete Moniker korrekt und der Dienst verfügbar ist.
So geben Sie einen Benutzernamen und ein Kennwort an:
Ändern Sie die Datei Service App.config, um
wsHttpBinding
zu verwenden. Dies ist für die Validierung von Benutzername und Kennwort erforderlich:Legen Sie
clientCredentialType
auf UserName fest:Öffnen Sie Visual Basic 6.0, und erstellen Sie eine neue Standard-EXE-Datei. Fügen Sie dem Formular eine Schaltfläche hinzu, und doppelklicken Sie darauf, um dem Click-Handler den folgenden Code hinzuzufügen.
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)
Führen Sie die Visual Basic-Anwendung aus, und überprüfen Sie die Ergebnisse. Die Visual Basic-Anwendung zeigt ein Meldungsfeld mit dem Ergebnis des Aufrufs von Add(3, 4) an.
Hinweis
Die im Dienstmoniker in diesem Beispiel angegebene Bindung wurde in WSHttpBinding_ICalculator geändert. Zudem müssen beim Aufruf von SetUserNameCredential(String, String) ein gültiger Benutzername und ein Kennwort angegeben werden.
So geben Sie Windows-Anmeldeinformationen an:
Legen Sie
clientCredentialType
in der Datei Service App.config auf Windows fest:Öffnen Sie Visual Basic 6.0, und erstellen Sie eine neue Standard-EXE-Datei. Fügen Sie dem Formular eine Schaltfläche hinzu, und doppelklicken Sie darauf, um dem Click-Handler den folgenden Code hinzuzufügen.
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)
Führen Sie die Visual Basic-Anwendung aus, und überprüfen Sie die Ergebnisse. Die Visual Basic-Anwendung zeigt ein Meldungsfeld mit dem Ergebnis des Aufrufs von Add(3, 4) an.
Hinweis
"Domäne", "Benutzer-ID" und "Kennwort" müssen durch gültige Werte ersetzt werden.
So geben Sie ein Problemtoken an:
Problemtoken werden nur für Anwendungen, die verbundene Sicherheit verwenden, eingesetzt. Weitere Informationen zur Verbundsicherheit finden Sie unter Verbund und ausgestellte Token und Verbundbeispiel.
Im folgenden Visual Basic-Codebeispiel wird veranschaulicht, wie die SetIssuedToken(String, String, String)-Methode aufgerufen wird:
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).