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 einer WCF Dienst aus einer COM-Anwendung können Sie die IChannelCredentials Schnittstelle zum Angeben von Anmeldeinformationen. In diesem Thema wird veranschaulicht verschiedene Möglichkeiten zur Angabe von Anmeldeinformationen mithilfe der IChannelCredentials Schnittstelle.

Hinweis

IChannelCredentials ist eine IDispatch-basierte Schnittstelle, und Sie erhalten keine IntelliSense-Funktionalität in Visual Studio-Umgebung.

In diesem Artikel verwendet die WCF Dienst definiert, der Nachrichtensicherheitsbeispiel.

So geben Sie ein Clientzertifikat an:

  1. Führen Sie die Datei Setup.bat im Nachrichtensicherheitsverzeichnis aus, um die erforderlichen Testzertifikate zu erstellen und zu installieren.

  2. Öffnen Sie das Nachrichtensicherheitsprojekt.

  3. Hinzufügen [ServiceBehavior(Namespace=``http://Microsoft.ServiceModel.Samples``)] an die ICalculator Schnittstellendefinition.

  4. Hinzufügen bindingNamespace=``http://Microsoft.ServiceModel.Samples die Endpunkt-Tag in der App.config-Datei für den Dienst.

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

  6. Ö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)  
    
  7. 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) kann auch verwendet werden, anstelle von SetClientCertificateFromStore(String, String, String, Object) 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

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:

  1. Ändern Sie die Datei Service App.config, um wsHttpBinding zu verwenden. Dies ist für die Validierung von Benutzername und Kennwort erforderlich:

  2. Legen Sie clientCredentialType auf UserName fest:

  3. Ö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)  
    
  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. Beachten Sie, dass Sie einen gültigen Benutzernamen und ein Kennwort im Aufruf von angeben müssen SetUserNameCredential(String, String).

So geben Sie Windows-Anmeldeinformationen an:

  1. Legen Sie clientCredentialType in der Datei Service App.config auf Windows fest:

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

  1. 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 folgende Visual Basic-Codebeispiel veranschaulicht das Aufrufen der SetIssuedToken(String, String, String) Methode:

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

    Weitere Informationen zu den Parametern für diese Methode finden Sie unter SetIssuedToken(String, String, String).

Siehe auch

Verbund
Gewusst wie: Konfigurieren von Anmeldeinformationen auf einem Verbunddienst
Gewusst wie: Erstellen eines Verbundclients
Nachrichtensicherheit
Bindungen und Sicherheit