Udostępnij za pośrednictwem


Instrukcje: określanie poświadczeń zabezpieczeń kanału

Moniker usługi Windows Communication Foundation (WCF) umożliwia aplikacjom COM wywoływanie usług WCF. Większość usług WCF wymaga od klienta określenia poświadczeń na potrzeby uwierzytelniania i autoryzacji. Podczas wywoływania usługi WCF z klienta programu WCF można określić te poświadczenia w kodzie zarządzanym lub w pliku konfiguracji aplikacji. Podczas wywoływania usługi WCF z aplikacji COM można użyć interfejsu IChannelCredentials w celu określenia poświadczeń. W tym temacie przedstawiono różne sposoby określania poświadczeń przy użyciu interfejsu IChannelCredentials .

Uwaga

IChannelCredentials jest interfejsem opartym na protokole IDispatch i nie uzyskasz funkcji IntelliSense w środowisku programu Visual Studio.

W tym artykule zostanie użyta usługa WCF zdefiniowana w przykładzie dotyczącym zabezpieczeń komunikatów.

Aby określić certyfikat klienta

  1. Uruchom plik Setup.bat w katalogu Message Security, aby utworzyć i zainstalować wymagane certyfikaty testowe.

  2. Otwórz projekt Message Security.

  3. Dodaj [ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")] do definicji interfejsu ICalculator .

  4. Dodaj bindingNamespace="http://Microsoft.ServiceModel.Samples" do tagu punktu końcowego w pliku App.config dla usługi.

  5. Skompiluj przykład zabezpieczeń komunikatów i uruchom Service.exe. Przejdź do identyfikatora URI usługi (http://localhost:8000/ServiceModelSamples/Service), aby upewnić się, że usługa działa.

  6. Otwórz program Visual Basic 6.0 i utwórz nowy plik .exe w warstwie Standardowa. Dodaj przycisk do formularza i kliknij dwukrotnie przycisk, aby dodać następujący kod do programu obsługi kliknięć:

        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. Uruchom aplikację Visual Basic i sprawdź wyniki.

    Aplikacja Języka Visual Basic wyświetli pole komunikatu z wynikiem wywołania metody Add(3, 4). SetClientCertificateFromFile(String, String, String) można SetClientCertificateFromStoreByName(String, String, String) również użyć zamiast SetClientCertificateFromStore(String, String, String, Object) ustawiania certyfikatu klienta:

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

Uwaga

Aby to wywołanie działało, certyfikat klienta musi być zaufany na maszynie, na którym działa klient.

Uwaga

Jeśli moniker jest źle sformułowany lub jeśli usługa jest niedostępna, wywołanie GetObject metody zwróci błąd z komunikatem "Nieprawidłowa składnia". Jeśli wystąpi ten błąd, upewnij się, że używany pseudonim jest poprawny i usługa jest dostępna.

Aby określić nazwę użytkownika i hasło

  1. Zmodyfikuj plik App.config usługi, aby użyć polecenia wsHttpBinding. Jest to wymagane w przypadku sprawdzania poprawności nazwy użytkownika i hasła:

  2. Ustaw wartość clientCredentialType UserName:

  3. Otwórz program Visual Basic 6.0 i utwórz nowy plik .exe w warstwie Standardowa. Dodaj przycisk do formularza i kliknij dwukrotnie przycisk, aby dodać następujący kod do programu obsługi kliknięć:

    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. Uruchom aplikację Visual Basic i sprawdź wyniki. Aplikacja Języka Visual Basic wyświetli pole komunikatu z wynikiem wywołania metody Add(3, 4).

    Uwaga

    Powiązanie określone w moniker usługi w tym przykładzie zostało zmienione na WSHttpBinding_ICalculator. Należy również pamiętać, że w wywołaniu SetUserNameCredential(String, String)należy podać prawidłową nazwę użytkownika i hasło.

Aby określić poświadczenia systemu Windows

  1. Ustaw clientCredentialType wartość Windows w pliku App.config usługi:

  2. Otwórz program Visual Basic 6.0 i utwórz nowy plik .exe w warstwie Standardowa. Dodaj przycisk do formularza i kliknij dwukrotnie przycisk, aby dodać następujący kod do programu obsługi kliknięć:

    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. Uruchom aplikację Visual Basic i sprawdź wyniki. Aplikacja Języka Visual Basic wyświetli pole komunikatu z wynikiem wywołania metody Add(3, 4).

    Uwaga

    Musisz zastąpić ciąg "domena", "userID" i "password" prawidłowymi wartościami.

Aby określić token problemu

  1. Tokeny wystawiania są używane tylko w przypadku aplikacji korzystających z zabezpieczeń federacyjnych. Aby uzyskać więcej informacji na temat zabezpieczeń federacyjnych, zobacz Federacja i wystawione tokeny i przykład federacji.

    Poniższy przykład kodu języka Visual Basic ilustruje sposób wywoływania SetIssuedToken(String, String, String) metody:

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

    Aby uzyskać więcej informacji na temat parametrów tej metody, zobacz SetIssuedToken(String, String, String).

Zobacz też