Привязка 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, он используется службой маркеров безопасности для шифрования ключа таким образом, чтобы служба могла его расшифровать.
Настройка, сборка и выполнение образца
Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.
Откройте командную строку разработчика для Visual Studio с правами администратора и запустите файл Setup.bat, чтобы создать необходимые сертификаты.
Этот пакетный файл использует Certmgr.exe и Makecert.exe , распределенные с помощью пакета SDK для Windows. Однако необходимо запустить Setup.bat из командной строки Visual Studio, чтобы включить сценарий для поиска этих средств.
Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation". Если вы используете Windows Vista, необходимо запустить Service.exe, Client.exe и SecurityTokenService.exe с повышенными привилегиями (щелкните правой кнопкой мыши файлы и нажмите кнопку "Запустить от имени администратора").