Vorgehensweise: Angeben von Anmeldeinformationen für Kanalsicherheit
Der Windows Communication Foundation (WCF)-Dienstmoniker 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 im Beispiel für Nachrichtensicherheit definierte WCF-Dienst verwendet.
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. Verwenden Sie Internet Explorer, und navigieren Sie zum URI des Diensts (), um die Funktion des Diensts zu überprüfen.
Ö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=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)
Führen Sie die Visual Basic-Anwendung aus, und überprüfen Sie die Ergebnisse.
Die Visual Basic-Anwendung zeigt ein Meldungsfeld an, das das Ergebnis des Aufrufs von Add(3, 4) beinhaltet. Anstelle von SetClientCertificateFromStore können zum Festlegen des Clientzertifikats auch SetClientCertificateFromFile oder SetClientCertificateFromStoreByName verwendet werden:
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: |
---|
Ist der Moniker nicht ordnungsgemäß formatiert oder der Dienst nicht verfügbar, wird nach dem GetObject-Aufruf ein Syntaxfehler zurückgegeben. Vergewissern Sie sich bei Auftreten dieses Fehlers, 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:
<endpoint address="" binding="wsHttpBinding" bindingNamespace="http://Microsoft.ServiceModel.Samples" bindingConfiguration="Binding1" contract="Microsoft.ServiceModel.Samples.ICalculator" />
Legen Sie clientCredentialType auf UserName fest:
<bindings> <wsHttpBinding> <binding name="Binding1" > <security mode="Message"> <message clientCredentialType="UserName"/> </security> </binding> </wsHttpBinding> </bindings>
Ö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=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)
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 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:
<bindings> <wsHttpBinding> <binding name="Binding1" > <security mode="Message"> <message clientCredentialType="Windows"/> </security> </binding> </wsHttpBinding> </bindings>
Ö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=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)
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 zu verbundener Sicherheit finden Sie unter Verbund und ausgestellte Token und Verbundbeispiel.
Im folgenden Visual Basic-Codebeispiel wird veranschaulicht, wie die SetIssuedToken-Methode aufgerufen wird:
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")
Weiter Informationen zu den Parametern für diese Methode finden Sie unter SetIssuedToken.
Siehe auch
Aufgaben
Vorgehensweise: Konfigurieren von Anmeldeinformationen auf einem Verbunddienst
Vorgehensweise: Erstellen eines Verbundclients
Konzepte
Verbund
Nachrichtensicherheit in WCF
Bindungen und Sicherheit