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:

  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. Fügen Sie [ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")] der ICalculator-Schnittstellendefinition hinzu.

  4. Fügen Sie bindingNamespace="http://Microsoft.ServiceModel.Samples" dem Endpunkttag in der App.config-Datei für den Dienst hinzu.

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

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

  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. Zudem müssen beim Aufruf von SetUserNameCredential(String, String) ein gültiger Benutzername und ein Kennwort angegeben werden.

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

Siehe auch