Windows® Identity Foundation (WIF) обеспечивает простую интеграцию с Служба WCF (Windows Communication Foundation). Она позволяет службе WCF использовать такие возможности WIF, как новая модель утверждений, поддержка дополнительных типов маркеров безопасности (SAML 2.0) и обработка маркеров. В данной теме описывается выполнение этих операций.

Включение Windows Identity Foundation в службе WCF с резидентным размещением

  1. В Visual Studio добавьте ссылку на сборку WIF(Microsoft.IdentityModel.dll) в проект службы WCF.

  2. Добавьте код, который вызывает метод ConfigureServiceHost и передает в него экземпляр узла службы, для которого нужно включить WIF. Это необходимо сделать до вызова метода ServiceHost.Open() для этого экземпляра. Этот метод вносит необходимые изменения в параметры экземпляра ServiceHost для интеграции функций WIF с конвейером обработки сообщений WCF.

    Примечание.
    Вызывать ConfigureServiceHost следует только после окончания настройки ServiceHost. Например, при обновлении сертификата службы в ServiceHost.Credentials после вызова ConfigureServiceHost изменения не будут отражены в SecurityTokenHandler.

В следующем примере кода показано, как это сделать.

  Копировать код
using (ServiceHost host = new ServiceHost(typeof(ClaimsAwareWebService), new Uri("http://localhost:6020/ClaimsAwareWebService"))) { // Настройка WIF в узле службы. // Попытка прочитать файл web.config/app.config и загрузить // параметры из раздела конфигурации <Microsoft.IdentityModel>. FederatedServiceCredentials.ConfigureServiceHost(host);

	 host.Open();

	 Console.WriteLine(“Service is ready, press ENTER to close ...”); Console.ReadLine();

	 host.Close() }

Включение Windows Identity Foundation в службе WCF с размещением в Интернете

Чтобы задать для службы с размещением в Интернете использование WIF, можно внести следующие изменения в конфигурацию.

  • Добавьте конфигурацию <behaviorConfiguration> (если она еще не существует)

      Копировать код
    <service name="Service" behaviorConfiguration="ClaimsBehavior"> ... </service>
    
  • Разместите ссылку на реакцию на события в конфигурации

      Копировать код
    <behaviors> <serviceBehaviors> <behavior name="ClaimsBehavior" > <!-- Расширение реакции на события для включения в службе поддержки утверждений --> <federatedServiceHostConfiguration/> </behavior> </serviceBehaviors> </behaviors>
    
  • Определите реакцию на события в виде расширения

      Копировать код
    <extensions> <behaviorExtensions> <!-- Это расширение реакции на события обеспечивает поддержку утверждений узлом службы --> <add name="federatedServiceHostConfiguration" type="Microsoft.IdentityModel.Configuration.ConfigureServiceHostBehaviorExtensionElement, Microsoft.IdentityModel, Version=0.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </behaviorExtensions> </extensions>