Поделиться через


Практическое руководство. Задание учетных данных безопасности канала

Моникер службы Windows Communication Foundation (WCF) позволяет com-приложениям вызывать службы WCF. Большинству служб WCF требуется, чтобы клиент указал учетные данные для проверки подлинности и авторизации. При вызове службы WCF из клиента WCF эти учетные данные можно указать в управляемом коде или в файле конфигурации приложения. При вызове службы WCF из COM-приложения можно использовать IChannelCredentials интерфейс для указания учетных данных. В данном разделе описаны различные способы указания учетных данных с использованием интерфейса IChannelCredentials.

Примечание.

IChannelCredentials - это интерфейс, основанный на IDispatch, и получение функциональных возможностей IntelliSense в среде Visual Studio невозможно.

В этой статье будет использоваться служба WCF, определенная в примере безопасности сообщений.

Задание сертификата клиента

  1. Запустите файл Setup.bat в каталоге "Безопасность сообщений", чтобы создать и установить требуемые тестовые сертификаты.

  2. Откройте проект безопасности сообщений.

  3. Добавьте [ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")] в ICalculator определение интерфейса.

  4. Добавьте bindingNamespace="http://Microsoft.ServiceModel.Samples" тег конечной точки в файл App.config для службы.

  5. Создайте образец безопасности сообщений и запустите файл Service.exe. Перейдите к универсальному коду ресурса (URI) службы,http://localhost:8000/ServiceModelSamples/Service чтобы убедиться, что служба работает.

  6. Откройте Visual Basic 6.0 и создайте новый стандартный EXE-файл. Добавьте в форму кнопку и дважды щелкните ее, чтобы добавить следующий код в обработчик щелчка.

        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. Запустите приложение Visual Basic и проверьте результаты.

    Приложение Visual Basic отобразит окно сообщений с результатом вызова Add(3, 4). SetClientCertificateFromFile(String, String, String) или SetClientCertificateFromStoreByName(String, String, String) также можно использовать вместо SetClientCertificateFromStore(String, String, String, Object) для задания сертификата клиента:

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

Примечание.

Чтобы этот вызов работал, сертификат клиента должен быть доверенным на компьютере, на котором выполняется клиент.

Примечание.

Если моникер неправильно сформирован или если служба недоступна, вызов GetObject возвращает ошибку с сообщением "Недопустимый синтаксис". Если вы получите эту ошибку, убедитесь, что используется моникер, который вы используете, и служба доступна.

Задание имени пользователя и пароля

  1. Измените файл App.config службы, чтобы использовать привязку wsHttpBinding. Это необходимо для проверки имени пользователя и пароля.

  2. Задайте для атрибута clientCredentialType значение UserName.

  3. Откройте Visual Basic 6.0 и создайте новый стандартный EXE-файл. Добавьте в форму кнопку и дважды щелкните ее, чтобы добавить следующий код в обработчик щелчка.

    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. Запустите приложение Visual Basic и проверьте результаты. Приложение Visual Basic отобразит окно сообщений с результатом вызова Add(3, 4).

    Примечание.

    Привязка, заданная в моникере служб в этом примере, изменена на WSHttpBinding_ICalculator. Также обратите внимание, что необходимо предоставить действительные имя пользователя и пароль в вызове метода SetUserNameCredential(String, String).

Задание учетных данных Windows

  1. Задайте для атрибута clientCredentialType значение Windows в файле App.config службы.

  2. Откройте Visual Basic 6.0 и создайте новый стандартный EXE-файл. Добавьте в форму кнопку и дважды щелкните ее, чтобы добавить следующий код в обработчик щелчка.

    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. Запустите приложение Visual Basic и проверьте результаты. Приложение Visual Basic отобразит окно сообщений с результатом вызова Add(3, 4).

    Примечание.

    Необходимо заменить "domain", "userID" и "password" на действительные значения.

Задание маркера вопроса

  1. Маркеры вопроса используются только для приложений с федеративной безопасностью. Дополнительные сведения о федеративной безопасности см. в разделе "Федерация" и "Выданные маркеры " и "Пример федерации".

    В следующем примере кода Visual Basic показано, как вызывать метод SetIssuedToken(String, String, String).

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

    Дополнительные сведения о параметрах для этого метода см. в разделе SetIssuedToken(String, String, String).

См. также