Экспорт (0) Печать
Развернуть все
Эта статья переведена вручную. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала

Обеспечение безопасности клиентов

В Windows Communication Foundation (WCF) требования безопасности для клиентов определяются службой. Это означает, что служба указывает используемый режим безопасности и определяет, должен ли клиент предоставить учетные данные. Таким образом, процесс обеспечения безопасности клиента прост: используйте метаданные, полученные от службы (если она опубликована), и создайте клиент. Метаданные указывают, как настроить клиент. Если служба требует, чтобы клиент предоставлял учетные данные, необходимо получить учетные данные, удовлетворяющие требованиям. В этом разделе подробно описан данный процесс. Дополнительные сведения о о создании защищенной службы см. в разделе Защита служб.

По умолчанию в привязках WCF включены функции безопасности. (Исключением является класс BasicHttpBinding.) Поэтому если служба была создана с помощью WCF, с большой вероятность она будет реализовывать функции безопасности для обеспечения проверки подлинности, конфиденциальности и целостности. В таком случае метаданные, предоставляемые службой, будут указывать, что требуется установить безопасный коммуникационный канал. Если метаданные службы не содержат требований по безопасности, не существует способа применить к службе какую-либо схему безопасности, например, SSL через HTTP. Если, однако, служба требует, чтобы клиент предоставлял учетные данные, разработчик, установщик или администратор клиента должны представить фактические учетные данные, которые клиент будет использовать для проверки своей подлинности в службе.

При создании клиента первым шагом является получение метаданных от службы, с которой будет взаимодействовать клиент. Это можно сделать двумя способами. Во-первых, если служба публикует конечную точку обмена метаданными (MEX) или предоставляет доступ к метаданным по протоколу HTTP или HTTPS, эти метаданные можно загрузить с помощью инструмента Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe), который генерирует файлы кода для клиента и файл конфигурации. (Дополнительные сведения о с использованием этого инструмента см. в разделе Обращение к службам с использованием клиента WCF.) Если служба не публикует конечную точку обмена метаданными (MEX) и не предоставляет доступ к метаданным по протоколу HTTP или HTTPS, необходимо обратиться к разработчику службы за документацией, содержащей описание требований к безопасности и метаданные.

Важное примечание Важно

Рекомендуется получать метаданные из надежного источника, который не был злонамеренно искажен. Метаданные, полученные по протоколу HTTP, передаются открытым текстом и могут быть подделаны. Если в службе используются свойства HttpsGetEnabled и HttpsGetUrl, для загрузки данных по протоколу HTTPS используйте URL-адрес, предоставленный разработчиком службы.

Источники метаданных можно разделить на две большие категории: надежные источники и ненадежные источники. Если вы доверяете источнику и загрузили код клиента и другие метаданные с безопасной конечной точки MEX этого источника, при создании клиента снабдите его правильными учетными данными — никакие дополнительные меры не требуются.

Однако если клиент и метаданные загружены из источника, о котором мало что известно, обязательно проверьте меры безопасности, используемые в коде. Например, не следует просто создавать клиент, который отправляет ваши личные или финансовые данные в службу, если эта служба не требует как минимум конфиденциальности и целостности. Необходимо доверять владельцу службы в степени, позволяющей раскрывать ему такую информацию, так как она доступна владельцу службы.

Поэтому, как правило, при использовании кода и метаданных от ненадежного источника проверяйте код и метаданные на предмет соответствия вашим требованиям к безопасности.

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

  1. Определите тип учетных данных клиента, требуемых службой. Это можно сделать одним из двух способов. Во-первых, если у вас есть документация от разработчика службы, в ней должен быть указан тип учетных данных клиента (при наличии), требуемых службой. Во-вторых, при наличии только файла конфигурации, созданного инструментом Svcutil.exe, можно изучить индивидуальные привязки и определить требуемый тип учетных данных.

  2. Задайте фактические учетные данные клиента. Фактические учетные данные клиента называются значением учетных данных клиента, чтобы отличать их от типа учетных данных. Например, если типом учетных данных клиента является сертификат, необходимо предоставить сертификат X.509, выданный службой сертификации, которой доверяет требуемая служба.

ms731094.collapse_all(ru-ru,VS.110).gifОпределение типа учетных данных клиента

При наличии файла конфигурации, созданного инструментом Svcutil.exe, изучите раздел <bindings>, чтобы определить требуемый тип учетных данных клиента. В этом разделе находятся элементы привязки, задающие требования безопасности. Конкретно изучите элемент <security> каждой привязки. Этот элемент содержит атрибут mode, которому можно присвоить одно из трех возможных значений (Message, Transport или TransportWithMessageCredential). Значение этого атрибута определяет режим, задающий, в свою очередь, какой из дочерних элементов является значимым.

Элемент <security> может содержать элемент <transport>, элемент <message> или оба этих элемента. Значимым элементом является тот, который соответствует режиму безопасности. Например, следующий код задает режим безопасности "Message", а типом учетных данных клиента для элемента <message> является "Certificate". В этом случае элемент <transport> можно игнорировать. Однако элемент <message> задает, что должен быть предоставлен сертификат X.509.

<wsHttpBinding>
    <binding name="WSHttpBinding_ICalculator">
       <security mode="Message">
           <transport clientCredentialType="Windows" 
                      realm="" />
           <message clientCredentialType="Certificate" 
                    negotiateServiceCredential="true"
                    algorithmSuite="Default" 
                    establishSecurityContext="true" />
       </security>
    </binding>
</wsHttpBinding>

Обратите внимание, что если для атрибута clientCredentialType задано значение "Windows", как показано с следующем примере, предоставлять фактическое значение учетных данных не требуется.Это связано с тем, что встроенная система безопасности Windows предоставляет фактические учетные данные (маркер Kerberos) пользователя, запустившего клиент.

<security mode="Message">
    <transport clientCredentialType="Windows " 
        realm="" />
</security>

ms731094.collapse_all(ru-ru,VS.110).gifЗадание значения учетных данных клиента

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

Обычной формой учетных данных является сертификат X.509. Эти учетные данные можно предоставить двумя способами.

  • Запрограммировав их в коде клиента (с помощью метода SetCertificate).

Добавив раздел <behaviors> в файл конфигурации клиента и использовав элемент clientCredentials (показан ниже).

ms731094.collapse_all(ru-ru,VS.110).gifЗадание значения <clientCredentials> в коде

Чтобы задать значение <clientCredentials> в коде, необходимо обратиться к свойству ClientCredentials класса ClientBase<TChannel>. Это свойство возвращает объект ClientCredentials, обеспечивающий доступ к различным типам учетных данных, как показано в приведенной ниже таблице.

Свойство ClientCredential

Описание

Примечания

ClientCertificate

Возвращает X509CertificateInitiatorClientCredential

Представляет сертификат X.509, предоставляемый клиентом для проверки своей подлинности в службе.

HttpDigest

Возвращает HttpDigestClientCredential

Представляет учетные данные дайджест-проверки подлинности HTTP. Эти учетные данные представляют собой хэш имени пользователя и пароля.

IssuedToken

Возвращает IssuedTokenClientCredential

Представляет настраиваемый маркер безопасности, выданный службой маркеров безопасности, обычно используемой в сценариях федерации.

Peer

Возвращает PeerCredential

Представляет одноранговые учетные данные для участия в сетке узлов домена Windows.

ServiceCertificate

Возвращает X509CertificateRecipientClientCredential

Представляет сертификат X.509, предоставляемый службой для согласования вне полосы.

UserName

Возвращает UserNamePasswordClientCredential

Возвращает пару, содержащую имя пользователя и пароль.

Windows

Возвращает WindowsClientCredential

Представляет учетные данные Windows клиента (учетные данные Kerberos). Свойства этого класса доступны только для чтения.

ms731094.collapse_all(ru-ru,VS.110).gifЗадание значения <clientCredentials> в конфигурации

Значения учетных данных задаются с помощью расширения функциональности конечной точки в виде дочерних элементов элемента <clientCredentials>. Используемый элемент зависит от типа учетных данных клиента. Например, в следующем примере кода показана конфигурация для задания сертификата X.509 с помощью <<clientCertificate> элемента <clientCredentials>.

<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="myEndpointBehavior">
          <clientCredentials>
            <clientCertificate findvalue="myMachineName" 
            storeLocation="Current" X509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>            
    </behaviors>
  </system.serviceModel>
</configuration>

Для задания учетных данных клиента в конфигурации добавьте элемент <endpointBehaviors> в файл конфигурации.Кроме того, добавленный элемент расширения функциональности должен быть связан с конечной точкой службы с помощью атрибута behaviorConfiguration элемента <endpoint>, как показано в приведенном ниже примере.Значение атрибута behaviorConfiguration должно соответствовать значению атрибута name расширения функциональности.

<configuration>

<system.serviceModel>

<client>

<endpoint address="http://localhost/servicemodelsamples/service.svc"

binding="wsHttpBinding"

bindingConfiguration="Binding1"

behaviorConfiguration="myEndpointBehavior"

contract="Microsoft.ServiceModel.Samples.ICalculator" />

</client>

</system.serviceModel>

</configuration>

ПримечаниеПримечание

Некоторые из значений учетных данных клиента не могут задаваться с помощью файлов конфигурации приложения; это, например, значения имени пользователя и пароля или значения пользователя и пароля Windows.Такие значения учетных данных могут быть заданы только в коде.

Дополнительные сведения о задании учетных данных клиента см. в разделе Как задать значения учетных данных клиента.

ПримечаниеПримечание

Значение ClientCredentialType игнорируется, если для параметра SecurityMode задано значение "TransportWithMessageCredential", как показано в следующем примере конфигурации.

<wsHttpBinding>
    <binding name="PingBinding">
        <security mode="TransportWithMessageCredential"  >
           <message  clientCredentialType="UserName" 
               establishSecurityContext="false"  
               negotiateServiceCredential="false" />
           <transport clientCredentialType="Certificate"  />
         </security>
    </binding>
</wsHttpBinding>

Добавления сообщества

ДОБАВИТЬ
Показ:
© 2014 Microsoft