Практическое руководство. Задание учетных данных безопасности канала
Моникер службы Windows Communication Foundation (WCF) позволяет com-приложениям вызывать службы WCF. Большинству служб WCF требуется, чтобы клиент указал учетные данные для проверки подлинности и авторизации. При вызове службы WCF из клиента WCF эти учетные данные можно указать в управляемом коде или в файле конфигурации приложения. При вызове службы WCF из COM-приложения можно использовать IChannelCredentials интерфейс для указания учетных данных. В данном разделе описаны различные способы указания учетных данных с использованием интерфейса IChannelCredentials.
Примечание.
IChannelCredentials - это интерфейс, основанный на IDispatch, и получение функциональных возможностей IntelliSense в среде Visual Studio невозможно.
В этой статье будет использоваться служба WCF, определенная в примере безопасности сообщений.
Задание сертификата клиента
Запустите файл Setup.bat в каталоге "Безопасность сообщений", чтобы создать и установить требуемые тестовые сертификаты.
Откройте проект безопасности сообщений.
Добавьте
[ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")]
вICalculator
определение интерфейса.Добавьте
bindingNamespace="http://Microsoft.ServiceModel.Samples"
тег конечной точки в файл App.config для службы.Создайте образец безопасности сообщений и запустите файл Service.exe. Перейдите к универсальному коду ресурса (URI) службы,
http://localhost:8000/ServiceModelSamples/Service
чтобы убедиться, что служба работает.Откройте 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)
Запустите приложение 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
возвращает ошибку с сообщением "Недопустимый синтаксис". Если вы получите эту ошибку, убедитесь, что используется моникер, который вы используете, и служба доступна.
Задание имени пользователя и пароля
Измените файл App.config службы, чтобы использовать привязку
wsHttpBinding
. Это необходимо для проверки имени пользователя и пароля.Задайте для атрибута
clientCredentialType
значение UserName.Откройте 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)
Запустите приложение Visual Basic и проверьте результаты. Приложение Visual Basic отобразит окно сообщений с результатом вызова Add(3, 4).
Примечание.
Привязка, заданная в моникере служб в этом примере, изменена на WSHttpBinding_ICalculator. Также обратите внимание, что необходимо предоставить действительные имя пользователя и пароль в вызове метода SetUserNameCredential(String, String).
Задание учетных данных Windows
Задайте для атрибута
clientCredentialType
значение Windows в файле App.config службы.Откройте 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)
Запустите приложение Visual Basic и проверьте результаты. Приложение Visual Basic отобразит окно сообщений с результатом вызова Add(3, 4).
Примечание.
Необходимо заменить "domain", "userID" и "password" на действительные значения.
Задание маркера вопроса
Маркеры вопроса используются только для приложений с федеративной безопасностью. Дополнительные сведения о федеративной безопасности см. в разделе "Федерация" и "Выданные маркеры " и "Пример федерации".
В следующем примере кода 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).