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


Привязка HTTP для федерации WS 2007

Пример WS2007FederationHttp демонстрирует использование WS2007FederationHttpBindingстандартной привязки, которую можно использовать для создания федеративных сценариев, поддерживающих спецификацию WS-Trust версии 1.3.

Примечание.

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

Пример состоит из клиентской программы на основе консоли (Client.exe), программы службы маркеров безопасности на основе консоли (Securitytokenservice.exe) и консольной программы службы (Service.exe). Служба реализует контракт, определяющий шаблон взаимодействия "запрос-ответ". Контракт определяется интерфейсом ICalculator, который предоставляет математические операции (Add, Subtract, Multiply и Divide). Клиент получает маркер безопасности от службы маркеров безопасности (STS) и осуществляет синхронные вызовы службы для заданной математической операции. Служба отправляет в ответ результат. Действия клиента отображаются в окне консоли.

В этом образце контракт ICalculator делается доступным с помощью элемента ws2007FederationHttpBinding. Конфигурация этой привязки на клиенте показана в следующем коде:

<bindings>
  <ws2007FederationHttpBinding>
    <binding name="ServiceFed" >
      <security mode ="Message">
        <message issuedKeyType ="SymmetricKey"
                 issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
          <!-- Endpoint address and binding for Security Token Service -->
          <issuer address ="http://localhost:8000/sts/windows"
                  binding ="ws2007HttpBinding" />
        </message>
      </security>
    </binding>
  </ws2007FederationHttpBinding>
</bindings>

<В безопасности>security значение указывает, какой режим безопасности следует использовать. В этом примере message используется безопасность, поэтому <сообщение> указывается внутри< системы безопасности.> Элемент <издателя> в <сообщении> указывает адрес и привязку для stS, которая выдает маркер безопасности клиенту, чтобы клиент смог пройти проверку подлинности в ICalculator службе.

Конфигурация этой привязки в службе показана в следующем коде:

<bindings>
  <ws2007FederationHttpBinding>
    <binding name="ServiceFed" >
      <security mode ="Message">
        <message issuedKeyType ="SymmetricKey"
                 issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
          <!-- Metadata address for Security Token Service -->
          <issuerMetadata address ="http://localhost:8000/sts/mex" >
            <identity>
              <certificateReference storeLocation ="CurrentUser"
                                    storeName="TrustedPeople"
                                    x509FindType ="FindBySubjectDistinguishedName"
                                    findValue ="CN=STS" />
            </identity>
          </issuerMetadata>
        </message>
      </security>
    </binding>
  </ws2007FederationHttpBinding>
</bindings>

<В безопасности>security значение указывает, какой режим безопасности следует использовать. В этом примере message используется безопасность, поэтому <сообщение> указывается внутри< системы безопасности.> Элемент <ws2007FederationHttpBinding issuerMetadata> внутри< сообщения> указывает адрес и удостоверение конечной точки, которую можно использовать для получения метаданных для stS.

Поведение службы отображается в следующем коде:

<behaviors>
  <serviceBehaviors>
    <behavior name ="ServiceBehaviour" >
      <serviceDebug includeExceptionDetailInFaults ="true"/>
      <serviceMetadata httpGetEnabled ="true"/>
      <serviceCredentials>
        <issuedTokenAuthentication>
          <knownCertificates>
            <add storeLocation ="LocalMachine"
                 storeName="TrustedPeople"
                 x509FindType="FindBySubjectDistinguishedName"
                 findValue="CN=STS" />
          </knownCertificates>
        </issuedTokenAuthentication>
        <serviceCertificate storeLocation ="LocalMachine"
                            storeName ="My"
                            x509FindType ="FindBySubjectDistinguishedName"
                            findValue ="CN=localhost"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

Выданная <функцияTokenAuthentication>> позволяет службе указывать ограничения маркеров, которые позволяют клиентам присутствовать во время проверки подлинности. Эта конфигурация указывает, что маркеры, подписанные сертификатом, у которых имя субъекта CN=STS, принимаются службой.

Служба маркеров безопасности делает единственную конечную точку доступной с помощью стандартной привязки WS2007HttpBinding. Служба отвечает на запросы маркеров от клиентов. Если клиент прошел проверку подлинности с использованием учетной записи Windows, служба выдает маркер, содержащий имя пользователя клиента в качестве утверждения. В одной из частей процедуры создания маркера служба маркеров безопасности подписывает маркер с использованием закрытого ключа, связанного с сертификатом CN=STS. Дополнительно она создает симметричный ключ и шифрует его с использованием открытого ключа, связанного с сертификатом CN=localhost. При возврате маркера клиенту служба маркеров безопасности также возвращает симметричный ключ. Клиент предъявляет выданный маркер службе ICalculator и подтверждает свое знание симметричного ключа, подписывая сообщение этим ключом.

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

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.

Файл Setup.bat , включенный в этот пример, позволяет настроить сервер и stS с соответствующими сертификатами для запуска локального приложения. Пакетный файл создает два сертификата в хранилище сертификатов LocalMachine/TrustedPeople. Имя субъекта первого сертификата CN=STS, он используется службой маркеров безопасности, чтобы подписывать маркеры безопасности, выдаваемые клиенту. Имя субъекта второго сертификата CN=localhost, он используется службой маркеров безопасности для шифрования ключа таким образом, чтобы служба могла его расшифровать.

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

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

  2. Откройте командную строку разработчика для Visual Studio с правами администратора и запустите файл Setup.bat, чтобы создать необходимые сертификаты.

Этот пакетный файл использует Certmgr.exe и Makecert.exe , распределенные с помощью пакета SDK для Windows. Однако необходимо запустить Setup.bat из командной строки Visual Studio, чтобы включить сценарий для поиска этих средств.

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

  2. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation". Если вы используете Windows Vista, необходимо запустить Service.exe, Client.exe и SecurityTokenService.exe с повышенными привилегиями (щелкните правой кнопкой мыши файлы и нажмите кнопку "Запустить от имени администратора").