WS-SecurityPolicy
WS-SecurityPolicy — спецификация в области веб-служб, разработанная компанией IBM совместно с 12 соавторами. Версия 1.2 стала стандартом организации OASIS в 2007 году, а в 2009 году была опубликована версия 1.3. Спецификация расширяет базовые протоколы безопасности, определённые в WS-Security, WS-Trust и WS-Secure Conversation, предоставляя механизмы для представления возможностей и требований веб-служб в виде политик. Утверждения политики безопасности основаны на каркасе WS-Policy.
Утверждения политики могут использоваться для задания как общих атрибутов безопасности, например, защиты транспортного уровня (<TransportBinding>), защиты на уровне сообщений (<AsymmetricBinding>) или временных меток, так и специфических атрибутов, например, типов токенов.
Большинство утверждений политики классифицируются по следующим категориям:
- Утверждения о защите — указывают элементы сообщения, которые должны быть подписаны, зашифрованы или присутствовать.
- Утверждения о токенах — определяют допустимые форматы токенов (SAML, X.509, имя пользователя и др.).
- Утверждения о привязке безопасности — контролируют основные меры безопасности, такие как защита транспортного уровня и уровня сообщений, наборы криптографических алгоритмов, требуемые временные метки.
- Утверждения о поддерживающих токенах — добавляют функции, такие как вход пользователя с использованием токена имени пользователя.
Политики могут использоваться как для автоматической генерации исходного кода с заданными функциями средствами разработки, так и для согласования параметров безопасности при работе веб-служб в режиме реального времени. Политики могут быть привязаны к элементам WSDL, таким как сервис, порт, операция или сообщение, как определено в стандарте WS Policy Attachment. В современной архитектуре стандарт сохраняет актуальность для корпоративных SOAP-сервисов и обеспечения сквозной безопасности на уровне сообщений, в то время как в публичных API доминируют архитектура REST и стандарты OAuth 2.0, OIDC и JWT[1].
Основные концепции
Механизмы работы стандарта WS-SecurityPolicy основаны на использовании специальных XML-элементов — утверждений (assertions), которые описывают конкретные правила защиты веб-служб. Ключевыми элементами являются утверждения безопасности (Security Assertions) и утверждения о компоновке (Layout Assertions)[2]. Утверждения безопасности определяют требования к защите сообщений и делятся на следующие основные категории:
- Утверждения о привязке безопасности (Security Binding Assertions) — определяют основной механизм защиты. Включают такие типы, как TransportBinding (защита на уровне транспортного протокола), SymmetricBinding (использование симметричных ключей) и AsymmetricBinding (использование асимметричной криптографии)[2][3].
- Утверждения о защите (Protection Assertions) — указывают, какие части сообщения подлежат защите (например, SignedParts для цифровой подписи и EncryptedParts для шифрования)[4].
- Утверждения о токенах (Token Assertions) — задают форматы токенов для аутентификации и авторизации (например, UsernameToken, X509Token, SamlToken)[2][5].
- Утверждения о поддерживающих токенах (Supporting Token Assertions) — определяют дополнительные токены, необходимые для поддержки основного механизма безопасности[2][6].
Утверждения о компоновке (Layout Assertions) гарантируют корректное добавление токенов в заголовок безопасности и определяют правила порядка следования элементов. К основным правилам относятся Strict (строгий порядок по принципу «объявление перед использованием») и Lax (свободный порядок, допускающий добавление элементов в любой последовательности, не противоречащей спецификации)[7].
Взаимодействие со смежными стандартами
Спецификация WS-SecurityPolicy тесно взаимодействует с другими стандартами стека WS-*, выступая в роли базового элемента для построения комплексных решений безопасности веб-служб. Сама по себе она не предоставляет полного решения, а используется совместно с такими протоколами, как WS-Trust и WS-SecureConversation[2].
Взаимодействие с протоколом WS-Trust строится на разделении ролей: WS-SecurityPolicy определяет требования к безопасности, а WS-Trust предоставляет механизм их выполнения. В политике безопасности с помощью специальных утверждений (например, IssuedToken) указывается необходимость предоставления определённого типа маркера безопасности, выпущенного доверенной службой (STS — Security Token Service). Обнаружив такое требование, клиент использует протокол WS-Trust для обращения к STS, проходит аутентификацию и получает требуемый маркер. Этот маркер затем включается в заголовок SOAP-сообщения при обращении к целевой веб-службе, тем самым выполняя заявленные в политике требования[8].
Для повышения эффективности обмена серией сообщений между клиентом и службой применяется стандарт WS-SecureConversation, позволяющий установить общий контекст безопасности с сеансовыми ключами вместо ресурсоёмкого асимметричного шифрования каждого отдельного сообщения. В этом случае WS-SecurityPolicy декларирует необходимость использования защищённого сеанса (например, через утверждение SecureConversationToken). В свою очередь, протокол WS-SecureConversation определяет процесс установления этого контекста и получения соответствующего маркера (SCT). После первоначального согласования последующие сообщения защищаются с использованием симметричных сеансовых ключей, что значительно снижает вычислительную нагрузку[9].
Примеры политик
Пространства имён, используемые в нижеприведённых фрагментах XML:
<p:Policy xmlns:p="http://www.w3.org/ns/ws-policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200802"> ... </p:Policy>
Добавление временной метки:
<sp:IncludeTimestamp />
Использование либо защиты транспортного уровня (HTTPS), либо защиты на уровне сообщений (XML Dsig/XML Enc):
<ExactlyOne> <sp:TransportBinding>...</sp:TransportBinding> <sp:AsymmetricBinding>...</sp:AsymmetricBinding > </ExactlyOne>
Определение утверждения SAML как токена безопасности:
<sp:IssuedToken>
<sp:RequestSecurityTokenTemplate>
<wst:TokenType>...#SAMLV2.0</wst:TokenType>
</sp:RequestSecurityTokenTemplate>
</sp:IssuedToken>
Утверждение о выданном токене ссылается на STS и определяет необходимый формат токена:
<sp:IssuedToken>
<sp:Issuer>
<wsa:EndpointReference>
<wsa:Address>http://sampleorg.com/sts</wsa:Address>
</wsa:EndpointReference>
</sp:Issuer>
<sp:RequestSecurityTokenTemplate>
<wst:TokenType>
http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID
</wst:TokenType>
...
</sp:RequestSecurityTokenTemplate>
...
</sp:IssuedToken>
Указание, что заголовок и тело сообщения должны быть подписаны, а вложения могут оставаться неподписанными:[2]
<sp:SignedParts xmlns:sp="..." ... > <sp:Body />? <sp:Header Name="Dx:NCName"? Namespace="Xd:anyURI" ... />* ... </sp:SignedParts>
Программные реализации и применение
Стандарт WS-SecurityPolicy имеет программные реализации в популярных Java-фреймворках для создания веб-служб. В фреймворке Apache CXF поддержка стандарта позволяет декларативно описывать требования безопасности непосредственно в WSDL-документе, автоматически настраивая компоненты библиотеки Apache WSS4J[10]. Веб-сервисный стек Metro, включающий эталонную реализацию JAX-WS, также использует политики из WSDL-файла для настройки безопасности, что дополнительно обеспечивает совместимость с платформой Microsoft .NET[11].
В экосистеме .NET уровень поддержки стандарта существенно различается в зависимости от версии платформы. Классический .NET Framework через технологию Windows Communication Foundation (WCF) предоставляет полноценную встроенную поддержку WS-SecurityPolicy, позволяя автоматически конфигурировать механизмы защиты[12]. В то же время в современных версиях платформы (.NET Core и выше) клиентские библиотеки WCF имеют ограниченную поддержку стандарта, и для реализации сложных сценариев безопасности разработчикам приходится прибегать к ручному формированию заголовков или использованию прокси-сервисов[13].
Практическое применение WS-SecurityPolicy активно продолжается в корпоративных системах, использующих протокол SOAP. При этом для новых проектов, основанных на архитектуре REST, стандарт не используется — в таких случаях применяются альтернативные технологии обеспечения безопасности, включая OAuth 2.0 и JSON Web Tokens (JWT)[1].
Другие языки политик WS
Термин «язык политик безопасности веб-служб» (Web Services Security Policy Language) используется в отношении двух различных основанных на XML языков:
Примечания
Ссылки
- WS-SecurityPolicy 1.2 (англ.). OASIS. Дата обращения: 28 мая 2026.
- WS-SecurityPolicy standards (англ.). OASIS. Дата обращения: 18 июня 2024.
- Security in a Web Services World: A Proposed Architecture and Roadmap (IBM/Microsoft Whitepaper, 2002) (англ.). MSDN. Дата обращения: 18 июня 2024.