SOAP (Simple Object Access Protocol) — это протокол обмена сообщениями, который используется для обмена структурированными данными в распределенных вычислительных средах. Хотя SOAP часто рассматривается как более сложная и тяжеловесная альтернатива REST, у него есть ряд расширенных возможностей, которые делают его подходящим выбором для определенных корпоративных приложений. Давайте подробно рассмотрим эти возможности, включая WS-Security, а также разберемся, как WS-Security обеспечивает безопасность SOAP-сообщений.

WS-спецификации играют важную роль в расширении функциональности и безопасности SOAP и других веб-сервисов."WS" в контексте WS-Security и других подобных спецификаций расшифровывается как "Web Services".

Расширенные возможности SOAP

  1. WS-Security (Безопасность веб-сервисов)

  2. WS-ReliableMessaging (Надежная доставка сообщений)

  3. WS-AtomicTransaction (Атомарные транзакции)

  4. WS-Addressing (Адресация веб-сервисов)

  5. SOAP Faults (Обработка ошибок)

  6. Полнота спецификаций и стандарты

1. WS-Security (Безопасность веб-сервисов)

WS-Security — это стандарт, разработанный для обеспечения безопасности SOAP-сообщений. Он добавляет поддержку для шифрования сообщений, цифровых подписей и использования токенов безопасности, таких как SAML и Kerberos. Это критически важно для приложений, требующих защиты данных на уровне сообщения.

Основные компоненты WS-Security:

  • Шифрование сообщений: Защищает содержимое сообщений, чтобы предотвратить их просмотр или изменение третьими лицами.

  • Цифровые подписи: Обеспечивают целостность и подлинность сообщений, позволяя получателю проверить, что сообщение не было изменено и действительно пришло от указанного отправителя.

  • Токены безопасности: Используются для передачи информации о безопасности, такой как идентификация пользователя и права доступа.

Пример использования:

  • Система обмена финансовыми данными между банками, где требуется высокая степень защиты данных.

Как работает WS-Security:

  1. Шифрование: Сообщения или части сообщений могут быть зашифрованы с использованием XML-Encryption, чтобы защитить их от несанкционированного доступа. Это гарантирует, что только авторизованные получатели могут расшифровать и прочитать сообщение.

  2. Подпись: Сообщения подписываются с использованием XML-Signature, что обеспечивает проверку целостности и подлинности. Подпись создается на основе части содержимого сообщения и криптографического ключа отправителя, и может быть проверена получателем.

  3. Токены безопасности: WS-Security поддерживает использование различных токенов для аутентификации и авторизации. Примеры включают SAML-токены (для передачи утверждений о пользователях) и Kerberos-токены (для безопасной передачи учетных данных).

Алгоритм работы:

  • Отправитель шифрует сообщение и добавляет цифровую подпись, используя свои криптографические ключи.

  • Получатель расшифровывает сообщение, используя свои ключи, и проверяет подпись, чтобы удостовериться в подлинности и целостности данных.

  • Токены безопасности используются для передачи дополнительной информации о безопасности, такой как права доступа и идентификация пользователя.

2. WS-ReliableMessaging (Надежная доставка сообщений)

WS-ReliableMessaging гарантирует, что сообщения доставляются надежно и в нужном порядке, несмотря на возможные сбои в сети. Это особенно важно для приложений, где критична доставка всех сообщений и их порядок.

Основные функции:

  • Гарантия доставки: Сообщения будут доставлены, даже если произойдут сетевые сбои.

  • Порядок доставки: Сообщения доставляются в том порядке, в котором были отправлены.

  • Отсутствие дублирования: Каждое сообщение будет доставлено только один раз.

Пример использования:

  • Системы, обрабатывающие финансовые транзакции, где необходимо гарантировать точную доставку сообщений в правильном порядке.

3. WS-AtomicTransaction (Атомарные транзакции)

WS-AtomicTransaction позволяет обеспечить атомарность операций в распределенных системах, что означает, что все операции в транзакции выполняются либо полностью, либо не выполняются вовсе. Это критично для обеспечения целостности данных.

Основные функции:

  • Атомарность: Транзакция выполняется как единое целое.

  • Согласованность: Данные остаются в согласованном состоянии до и после выполнения транзакции.

  • Изолированность: Взаимодействие с данными другими транзакциями происходит без влияния на текущую транзакцию.

  • Долговечность: Результаты транзакции сохраняются даже в случае сбоя системы.

Пример использования:

  • Финансовые приложения, где транзакции с банковскими счетами должны быть атомарными, чтобы избежать непоследовательных состояний данных.

4. WS-Addressing (Адресация веб-сервисов)

WS-Addressing стандартизирует информацию об адресах и позволяет веб-сервисам обмениваться сообщениями без зависимости от конкретных транспортных протоколов. Он поддерживает более гибкую маршрутизацию и обработку сообщений.

Основные функции:

  • Абстрактные адреса: Позволяют ссылаться на конечные точки и операции без привязки к конкретным транспортным протоколам.

  • Маршрутизация сообщений: Упрощает маршрутизацию сообщений между сервисами, что важно для сложных распределенных систем.

Пример использования:

  • Система взаимодействия между несколькими микросервисами, где требуется гибкость в маршрутизации сообщений.

5. SOAP Faults (Обработка ошибок)

SOAP Faults обеспечивают стандартный способ обработки и передачи ошибок в SOAP-сообщениях. Это важно для унифицированного управления ошибками в распределенных системах.

Основные компоненты:

  • Код ошибки: Указывает тип ошибки.

  • Сообщение об ошибке: Описание ошибки.

  • Подробности ошибки: Дополнительные данные, объясняющие природу ошибки.

Пример использования:

  • Веб-сервис, который возвращает детализированные ошибки клиенту при некорректных запросах или сбоях в работе.

6. Полнота спецификаций и стандарты

SOAP имеет обширный набор спецификаций и поддерживает строгие стандарты, что делает его подходящим для крупных корпоративных решений, требующих формализованных интерфейсов и контрактов.

Основные функции:

  • Строгость стандартов: SOAP использует XML для структурирования сообщений, что обеспечивает строгое определение данных и операций.

  • Контракты: Определяются с использованием WSDL (Web Services Description Language), что позволяет четко описывать интерфейсы веб-сервисов.

Пример использования:

  • Корпоративные системы, такие как ERP и CRM, где важно иметь строго определенные и стандартизированные интерфейсы для интеграции различных модулей и систем.

Что такое WS-Security и как он работает?

WS-Security — это стандарт безопасности для SOAP-сообщений, который обеспечивает защиту данных на уровне сообщений. Он позволяет включать в сообщения элементы безопасности, такие как подписи и шифрование, а также токены аутентификации.

Компоненты WS-Security:

  1. Шифрование сообщений (XML Encryption):

    • WS-Security позволяет шифровать части SOAP-сообщений, обеспечивая конфиденциальность данных.

    • Используется для защиты содержимого сообщений от просмотра неавторизованными лицами.

    <EncryptedData>
      <!-- Данные зашифрованы -->
    </EncryptedData>
    
  2. Цифровые подписи (XML Signature):

    • Сообщения или их части могут быть подписаны для обеспечения целостности и подлинности.

    • Подпись включает информацию, позволяющую получателю проверить, что сообщение не было изменено и пришло от доверенного отправителя.

    <Signature>
      <!-- Подписанные данные -->
    </Signature>
    
  3. Токены безопасности:

    • WS-Security поддерживает различные токены для аутентификации и передачи информации о пользователе.

    • Например, SAML-токены могут включать утверждения о пользователе, такие как его роли и права доступа.

    <Security>
      <UsernameToken>
        <Username>user</Username>
        <Password>password</Password>
      </UsernameToken>
    </Security>
    

Алгоритм работы WS-Security:

  1. Отправитель создает SOAP-сообщение и добавляет к нему элементы безопасности.

    • Например, сообщение может быть зашифровано и подписано.

  2. Получатель принимает SOAP-сообщение и проверяет его элементы безопасности.

    • Получатель расшифровывает сообщение, используя свои ключи, и проверяет подпись, чтобы убедиться в целостности и подлинности сообщения.

  3. Токены безопасности используются для передачи информации об аутентификации и правах доступа.

    • Например, получатель может использовать SAML-ток

Основные критерии для выбора между REST и SOAP

  1. Требования к функциональности и характеристикам системы:

    • Анализ того, какие функции и возможности должна предоставлять система.

  2. Требования безопасности:

    • Уровень безопасности данных и необходимость в дополнительных механизмах аутентификации и авторизации.

  3. Требования к производительности:

    • Скорость отклика и объем данных, передаваемых в запросах и ответах.

  4. Совместимость и интеграция:

    • Возможность интеграции с другими системами, которые могут использовать REST или SOAP.

  5. Простота разработки и поддержки:

    • Уровень сложности в разработке, развертывании и поддержке сервиса.

Подробное рассмотрение факторов

1. Требования к функциональности

REST:

  • Легкость использования и масштабируемость: REST отлично подходит для CRUD-операций (Create, Read, Update, Delete), что делает его идеальным выбором для веб-приложений, предоставляющих доступ к данным и ресурсам.

  • Форматы данных: REST может работать с любыми форматами данных (JSON, XML, HTML и др.), но чаще всего используется JSON, что делает его подходящим для взаимодействия с веб-приложениями и мобильными клиентами.

SOAP:

  • Расширенные возможности: SOAP предоставляет дополнительные функциональные возможности, такие как поддержка транзакций, безопасность на уровне сообщений, атомарные операции и надежная доставка сообщений.

  • Упор на формальность и стандартизацию: SOAP строго определяет структуру сообщения и использует XML, что делает его более подходящим для сложных и корпоративных приложений, требующих строгих стандартов.

2. Требования безопасности

REST:

  • Базовая безопасность: REST использует HTTPS для шифрования данных и базовые методы аутентификации, такие как OAuth.

  • Требования к безопасности: REST подходит для публичных API и приложений, где безопасность обеспечивается на транспортном уровне.

SOAP:

  • Продвинутая безопасность: SOAP поддерживает WS-Security, обеспечивая шифрование сообщений, цифровые подписи и контроль целостности на уровне сообщения.

  • Комплексная защита: SOAP подходит для корпоративных приложений, где требуется высокий уровень безопасности, таких как финансовые или правительственные системы.

3. Требования к производительности

REST:

  • Легковесность: REST-запросы обычно меньше по размеру и проще, что делает их более быстрыми в обработке.

  • Кэширование: REST поддерживает кэширование ответов, что может значительно улучшить производительность при повторяющихся запросах.

SOAP:

  • Тяжеловесность: SOAP-запросы включают много дополнительной информации (например, заголовки XML), что делает их более объемными и сложными для обработки.

  • Сложная обработка: SOAP может быть менее эффективным для высоконагруженных систем из-за дополнительной обработки XML.

4. Совместимость и интеграция

REST:

  • Совместимость с веб-технологиями: REST легко интегрируется с веб-приложениями и мобильными приложениями, благодаря использованию JSON и простоте HTTP.

  • Широкое использование: REST часто используется в открытых API и интернет-сервисах, что делает его популярным выбором для взаимодействия с различными клиентами.

SOAP:

  • Интеграция с корпоративными системами: SOAP хорошо интегрируется с системами, требующими строгой спецификации и стандартов, такими как ERP и CRM системы.

  • Поддержка сложных контрактов: SOAP подходит для ситуаций, где необходимо строгое описание интерфейсов и контрактов сервисов.

5. Простота разработки и поддержки

REST:

  • Простота и гибкость: REST прост в использовании и реализации, особенно для разработчиков, знакомых с HTTP и JSON.

  • Быстрая разработка: REST API может быть быстро создан и модифицирован, что делает его идеальным для агильных команд и стартапов.

SOAP:

  • Формальная структура: SOAP требует более тщательного планирования и разработки из-за своей строгой структуры и необходимости работы с XML.

  • Инструменты и стандарты: SOAP имеет богатую поддержку инструментов и стандартов для разработки и тестирования, но требует больше усилий на этапе внедрения.

Примеры и аналогии

REST:

  • Пример: Вы создаете веб-приложение для электронной коммерции, где клиенты могут просматривать и заказывать товары. REST будет подходящим выбором, так как он легковесен и отлично поддерживает CRUD-операции.

  • Аналогия: REST похож на простой меню-ресторан, где клиенты могут выбрать блюда (ресурсы) из меню и заказать их (CRUD-операции).

SOAP:

  • Пример: Вы разрабатываете платежную систему для банка, которая требует высокой безопасности и надежности. SOAP будет подходящим выбором, поскольку он предоставляет расширенные возможности для обеспечения безопасности и надежности передачи данных.

  • Аналогия: SOAP можно сравнить с формальным деловым контрактом, где каждое действие строго определено и документировано, что гарантирует надежность и безопасность.

Комментарии (5)


  1. alexhott
    05.07.2024 04:47
    +1

    Да никто в здравом уме сейчас новые сервисы на соапе поднимать не будет,

    куча старых тяжелых систем, да на нем работают,

    но делать новые используя самый тяжеловесный протокол? Да ну нафиг.


    1. starfair
      05.07.2024 04:47

      Там где крутятся данные о больших деньгах, и соответственно и речь о больших рисках в случае утечки данных, то будут. Про мелкие компании никто и не говорит, ибо они в большинстве своём и нафик никому не уперлись, чтобы тратить силы на взлом их протоколов. Там rest самое то. А для крупных игроков,не вложится в разработку на основе тяжёлых протоколов - себе дороже. О чем собственно и статья


      1. alexhott
        05.07.2024 04:47

        А расскажите мне насколько лучше защита при передаче SOAP-ом от любого другого протокола, если передаем по https например?

        И передаем документы подписаные КЭП? Да и зашифровать можем хоть сто раз более надежными методами.

        Надежность доставки тоже реализуется любыми другими способами.

        Да и то что описано возможно никогда ни одной библиотекой в полной мере не было реализовано в принципе. По крайней мере все то что я встречал тупо открытую xml передавало, а токен отдельным парамтров http запроса не имеющего отношения soap.

        А вот как раз для финансовой отрасли сейчас важна скорость при диких объемах и тут соап далеко сзади тащится.


  1. aleksandy
    05.07.2024 04:47

    Смешались в кучу
    Кони, люди...

    https://ru.wikipedia.org/wiki/REST

    В отличие от веб-сервисов (веб-служб) на основе SOAP, не существует «официального» стандарта для RESTful веб-API. Дело в том, что REST является архитектурным стилем, в то время как SOAP является протоколом.


  1. baldr
    05.07.2024 04:47

    Есть такая нидерландская компания TenneT - крупный энергетический оператор. В 2001 году они решили обновить свой софт и сервисы для сторонних клиентов. Раньше по-старинке обменивались файликами по FTP, а надо что-то новое уже применить, XXI век всё-таки!

    Собрали комитет, рассмотрели варианты и выбрали самую новую технологию - SOAP! WS-Addressing, WSSE, токены-шмокены, подписи и сертификаты..

    Ну и начали внедрять. Написали спецификации, нашли программистов и начали! Надо было всё делать параллельно с уже существующей системой, так что не торопились.

    Внезапно, настал 2021 год. Наконец, объявили, что первая фаза закончена и можно клиентам начинать мигрировать в тестовом порядке. Это тот момент, когда мне дали задачу подключиться и попробовать что-то отправить в это API.

    Скажу я вам, это пример того, как за 20 лет бывшая новая технология оказывается на свалке! Я пишу на Python и, в принципе, там есть более-менее рабочие библиотеки для SOAP, но то что нужно для TenneT - видимо, не используется уже больше нигде, поскольку поддержки половины фич просто не было. С миру по нитке, я за три месяца кое-как научился подписывать и отправлять правильно выглядящий XML. Только он не принимался. Неправильная подпись - и всё тут. Знакомые джависты на вопросы отвечали что такой археологией не занимаются. Я пробовал C#, Java, но там даже собрать приложение было проблемой - все примеры в интернете ссылались на слишком старые версии библиотек.

    Перечитав весь интернет три раза, я, наконец, наткнулся на описание бага, подозрительно похожего на мою проблему. Связался с его автором и он мне рассказал что через php он смог отправить пакет и он был корректно принят..

    В итоге у меня приложение на Python вызывает php-скрипт, который через SOAP отправляет запрос, принимает ответ и возвращает всё обратно в Python. Все поля xml-конверта выглядят идентично моим в python, но, видимо, подпись как-то отличается. Ненавижу этого монстра всем сердцем, но приходится так работать.

    В 2024 году TenneT объявила, что всё, уже-таки дедлайн и всем уже обязательно надо переключаться на новую версию. Народ забегал и теперь уже у меня начали какие-то левые люди спрашивать совета..