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


Привязка 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 используется безопасность, поэтому <сообщение> указывается внутри <системы безопасности>. Элемент <issuerMetadata> внутри ws2007FederationHttpBinding указывает адрес и идентификацию конечной точки, которую можно использовать для получения метаданных для 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>

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

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

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

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 и используется службой STS для подписи маркеров безопасности, которые служба выдает клиенту. Второй сертификат имеет имя субъекта CN=localhost и используется службой STS для шифрования ключа так, чтобы служба могла его расшифровать.

Настройка, сборка и запуск примера

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

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

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

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

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