Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
С помощью Windows Communication Foundation (WCF) служба может указать, как клиент проходит проверку подлинности в службе. Например, служба может указать, что клиент проходит проверку подлинности с помощью сертификата.
Определение типа учетных данных клиента
Извлеките метаданные из конечной точки метаданных сервиса. Метаданные обычно состоят из двух файлов: клиентского кода на выбранном языке программирования (по умолчанию — Visual C#) и XML-файла конфигурации. Одним из способов получения метаданных является использование средства Svcutil.exe для возврата клиентского кода и конфигурации клиента. Дополнительные сведения см. в разделе "Получение метаданных " и средства служебной программы метаданных ServiceModel (Svcutil.exe).
Откройте XML-файл конфигурации. Если вы используете средство Svcutil.exe, имя файла по умолчанию Output.config.
<Найдите элемент безопасности> с атрибутом
mode(<режим безопасности =MessageOrTransport> гдеMessageOrTransportустановлен один из режимов безопасности).Найдите дочерний элемент, соответствующий значению режима. Например, если для режима задано значение Message, найдите <элемент сообщения> , содержащийся в элементе <безопасности> .
Обратите внимание на значение, назначенное атрибуту
clientCredentialType. Фактическое значение зависит от того, какой режим используется, транспорт или сообщение.
В следующем XML-коде показана конфигурация клиента с помощью безопасности сообщений и требование сертификата для проверки подлинности клиента.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Пример: режим транспорта TCP с сертификатом в качестве учетных данных клиента
В этом примере для режима безопасности задан режим транспорта и задано значение учетных данных клиента для сертификата X.509. В следующих процедурах показано, как задать значение учетных данных клиента для клиента в коде и конфигурации. Предполагается, что вы использовали средство служебной программы метаданных ServiceModel (Svcutil.exe) для возврата метаданных (кода и конфигурации) из службы. Дополнительные сведения см. в разделе "Практическое руководство. Создание клиента".
Чтобы задать значение учетных данных клиента в коде
Используйте средство служебной программы метаданных ServiceModel (Svcutil.exe) для создания кода и конфигурации из службы.
Создайте экземпляр клиента WCF с помощью созданного кода.
В клиентском классе задайте ClientCredentials для свойства ClientBase<TChannel> класса соответствующее значение. В этом примере свойство присваивается сертификату X.509 с помощью SetCertificate метода X509CertificateInitiatorClientCredential класса.
// Create a binding using Transport and a certificate. NetTcpBinding b = new NetTcpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate; // Create an EndPointAddress. EndpointAddress ea = new EndpointAddress( "net.tcp://localHost:8036/Calculator/MyCalculator"); // Create the client. CalculatorClient cc = new CalculatorClient(b, ea); // Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com"); try { cc.Open(); // Begin using the client. Console.WriteLine(cc.Divide(1001, 2)); cc.Close(); } catch (AddressAccessDeniedException adExc) { Console.WriteLine(adExc.Message); Console.ReadLine(); } catch (System.Exception exc) { Console.WriteLine(exc.Message); Console.ReadLine(); }' Create a binding using Transport and a certificate. Dim b As New NetTcpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate ' Create an EndPointAddress. Dim ea As New EndpointAddress("net.tcp://localHost:8036/Calculator/MyCalculator") ' Create the client. Dim cc As New CalculatorClient(b, ea) ' Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( _ StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com") Try cc.Open() ' Begin using the client. Console.WriteLine(cc.Divide(1001, 2)) cc.Close() Catch adExc As AddressAccessDeniedException Console.WriteLine(adExc.Message) Console.ReadLine() Catch exc As System.Exception Console.WriteLine(exc.Message) Console.ReadLine() End TryВы можете использовать любой из перечислений X509FindType класса. Имя субъекта используется здесь, если сертификат изменен (из-за даты окончания срока действия). Использование имени субъекта позволяет инфраструктуре снова найти сертификат.
Указание значения учетных данных клиента в конфигурации
Добавьте элемент <поведения> в элемент <поведения>.
<Добавьте элемент clientCredentials> в <элемент behaviors>. Обязательно задайте требуемый
nameатрибут соответствующим значением.<Добавьте элемент clientCertificate> в <элемент clientCredentials>.
Задайте для следующих атрибутов соответствующие значения:
storeLocation,storeName,x509FindTypeиfindValue, как показано в следующем коде. Дополнительные сведения о сертификатах см. в статье "Работа с сертификатами".<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>При настройке клиента укажите поведение, задав
behaviorConfigurationатрибут<endpoint>элемента, как показано в следующем коде. Элемент конечной точки является дочерним элементом клиентского<> элемента. Кроме того, укажите имя конфигурации привязки, установив атрибутbindingConfigurationна привязку для клиента. При использовании созданного файла конфигурации имя привязки создается автоматически. В этом примере имя —"tcpBindingWithCredential".<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
См. также
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Программирование безопасности WCF
- Выбор типа учетных данных
- Утилита метаданных ServiceModel (Svcutil.exe)
- Работа с сертификатами
- Практическое руководство. Создание клиента
- <netTcpBinding>
- <безопасность>
- <Сообщение>
- <поведение>
- <Поведения>
- <клиентский сертификат>
- <clientCredentials>