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


Транспорт WS с учетными данными сообщения

В этом примере показано использовании безопасности транспорта SSL в сочетании с передаваемыми в сообщении учетными данными клиента. В этом примере используется привязка wsHttpBinding.

По умолчанию привязка wsHttpBinding обеспечивает взаимодействие по протоколу HTTP. При настройке для безопасности транспорта привязка поддерживает взаимодействие по протоколу HTTPS. Протокол HTTPS обеспечивает конфиденциальность и защиту целостности передаваемых по каналам связи сообщений. Тем не менее набор механизмов аутентификации, который можно использовать для проверки подлинности клиента при соединении со службой, ограничен механизмами, поддерживаемыми транспортом HTTPS. Windows Communication Foundation (WCF) предлагает режим безопасности, предназначенный TransportWithMessageCredential для преодоления этого ограничения. Если включен этот режим безопасности, для обеспечения конфиденциальности и целостности передаваемых сообщений, а также для проверки подлинности службы, используется безопасность транспорта. Однако проверка подлинности клиента выполняется путем размещения учетных данных клиента непосредственно в сообщении. Это позволяет использовать любой тип учетных данных, поддерживаемый режимом безопасности сообщений для проверки подлинности клиента, сохраняя преимущество производительности режима безопасности транспорта.

В этом примере для проверки подлинности клиента на стороне службы используется тип учетных данных UserName.

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

Примечание.

Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.

Код программы в примере почти идентичен службе "Начало работы ". Имеется одна дополнительная операция, предоставляемая контрактом службы - GetCallerIdentity. Операция возвращает вызывающей стороне имя удостоверения вызывающей стороны.

public string GetCallerIdentity()
{
    // Use ServiceSecurityContext.WindowsIdentity to get the name of the caller.
    return ServiceSecurityContext.Current.WindowsIdentity.Name;
}

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

<system.serviceModel>
  <client>
    <endpoint name=""
              address="https://localhost/servicemodelsamples/service.svc"
              binding="wsHttpBinding"
              bindingConfiguration="Binding1"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
  </client>

  <bindings>
    <wsHttpBinding>
      <!--
        This configuration defines the security mode as TransportWithMessageCredential.
        and the clientCredentialType as UserName.
        -->
      <binding name="Binding1">
        <security mode ="TransportWithMessageCredential">
          <message clientCredentialType="UserName" />
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>
</system.serviceModel>

Указанный адрес использует схему https:// . Конфигурация привязки задает режим безопасности TransportWithMessageCredential. Тот же режим безопасности необходимо задать в файле Web.config службы.

Так как сертификат, используемый в этом примере, является тестовый сертификат, созданный с Makecert.exe, при попытке получить доступ к https: адресу, например https://localhost/servicemodelsamples/service.svcиз браузера, появится оповещение системы безопасности. Чтобы клиент WCF работал с тестируемым сертификатом, в клиент был добавлен дополнительный код, чтобы отключить оповещение системы безопасности. При использовании рабочих сертификатов этот код и соответствующие классы не требуются.

// WARNING: This code is only needed for test certificates such as those created by makecert. It is
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");

При выполнении примера запросы и ответы операций отображаются в окне консоли клиента. Чтобы закрыть клиент, нажмите клавишу ВВОД в окне клиента.

Username authentication required.
Provide a valid machine or domain account. [domain\\user]
   Enter username:
YourDomainName\YourAccountName
   Enter password:
********
YourDomainName\YourAccountName
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Настройка, сборка и выполнение образца

  1. Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.

  2. Убедитесь, что вы выполнили инструкции по установке сертификата сервера службы IIS (IIS).

  3. Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.

  4. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".