Wso2 шина что это

WSO2: Настройка прокси к сервису с аутентификацией по логину и паролю

Задача

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

Решение

Использовать шину: WSO2 Enterprise Service Bus, на которой настроить прокси-сервис.

Используем WSO2 ESB версии 4.7.0.

Создаём политики

Так как целевой сервис защищён по стандарту WS-Security, то и доступ к нему будем настраивать по всей строгости стандарта.
Политики создаются как ресурсы в локальном репозитории, в интерфейсе: Manage — Service Bus — Local Entries — Add Local Entries — Add In-lined XML Entry.

Политика для исходящих сообщений

Здесь и в дальнейшем имена могут даваться произвольные, но буду акцентировать на них внимание, потому что через них будут связываться все артефакты в одно целое
Указываем имя: service-policy
Указываем политику:

Основной частью в этой политике является указание имени пользователя целевого сервиса и класса, который в нашем случае просто подставит необходимый пароль, класс s.e.r.PasswordCallBackHandler:

Пакуем в jar и кладём в WSO2_HOME/repository/components/lib/.
Рестартуем WSO2.

Политика для входящих сообщений

Указываем имя: empty-policy.
Указываем политику:

Создаём Address Endpoint

Указываем имя: my-endpoint.
Указываем адрес сервиса.
В дополнительный опциях отмечаем использование WS-Security и указываем политики для исходящих и входящих сообщений созданные ранее.
Исходник Endpoint’а:

Создаём XSLT-преобразование сообщений

XSLT-преобразования создаются там же где и политики: Manage — Service Bus — Local Entries — Add Local Entries — Add In-lined XML Entry.

Преобразование входящего сообщения

Нам необходимо привести запрос нашего приложения к виду, который понимает сервис:
Указываем имя: in-xslt
Указываем преобразование:

Преобразование в исходящее сообщение

Нам нужно ответ сервиса привести к виду, понятному для приложения. Шаг идентичен шагу для входящего сообщения, только имя: out-xslt.

Создаём Proxy Service

В UI: Manage — Service — Add — Proxy Service — Custom Proxy
Указываем имя: external-service. По этому имени будет доступен ваш сервис на шине, например: localhost:8280/services/external-service.
В нашем случае снимаем отметку с протокола https.
Дальше переключаемся в режим исходно кода (switch to source view) и приводим содержимое приблизительно к следующему:

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

Дополнительно

Чтобы следить за тем, во что превращает наша прокси сообщения, использовал fiddler
Прокси пробрасывает заголовок Action пришедшие из приложения, а сервис ругается?

Добавляем медиаторы в последовательность прокси сервиса, удаляем заголовок Action:

Прокси возвращает данные в некорректной кодировке?

Указываем кодировку, в которой возвращаем сообщения:

Ответ сервиса состоит из нескольких частей?

WSO2 по умолчанию считает что ответ должен состоять из одной части, поэтому передают на преобразование то что находится по пути: s11:Body/child::*[position()=1] | s12:Body/child::*[position()=1], как результат мы можем трансформировать только первую часть, чтобы это исправить меняем вызов преобразователя в сервисе:

… и учитываем это в преобразователе:

Нерешённые вопросы

Пришлось настраивать две политики безопасности

Есть ощущение что можно обойтись одной, но с единой политикой выходила ошибка, о том, что ответ сервиса не содержит заголовков безопасности. А он действительно их не содержит. Чтоб это обойти пришлось писать пустую политику для ответа.

Читайте также: Шины бриджстоун зимние нешипованные 16 размер

Не найдено встроенного решения для хранения учётных данных стороннего сервиса

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

Видео:[Russian] Changing the IT landscape of Bank ZENIT with WSO2, WSO2 WebinarСкачать

[Russian] Changing the IT landscape of Bank ZENIT with WSO2, WSO2 Webinar

WSO2 — один из самых значимых вендоров интеграционных решений в мире

Видео:Демонстрация возможностей WSO2 Identity ServerСкачать

Демонстрация возможностей WSO2 Identity Server

Forrester

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

Видео:Цифровизация вашей компании при помощи WSO2 API Manager 4.0Скачать

Цифровизация вашей компании при помощи WSO2 API Manager 4.0

Gartner

В исследовании Гартнера рассматриваются 4 поставщика решений, используемых в IoT. В отчете они рассматриваются с точки зрения предоставляемых способов интеграции, корреляции и анализа различных источников данных.

Видео:Какие грузовые шины устанавливают на рулевую ось.Скачать

Какие грузовые шины устанавливают на рулевую ось.

WSO2 это

Комплексная платформа

WSO2 предлагает комплексное решение, состоящее из более чем 20 продуктов, закрывающих весь спектр задач от интеграции и управления API до аналитики и управления правами доступа. Архитектура решения позволяет использовать только те продукты, которые необходимы для решения ваших задач.

100% Open-Source

Все продукты WSO2 распространяются под лицензией с полностью открытым исходным кодом. Это позволяет вам использовать продукты без каких-либо лицензионных платежей. Никаких черных ящиков — вы можете провести аудит или выполнить модификацию любых элементов.

Решение, которому доверяют

WSO2 используют ведущие компании мира. Такие гиганты как eBay, Cisco, Boeing доверили продуктам WSO2 решение критически-важных задач.

Сквозная интеграция

Все продукты компании WSO2 построены на одной платформе — Carbon, что обеспечивает сквозную интеграцию и единый подход к развертыванию и управлению всеми подсистемами комплекса.

Облачное решение

Вы можете развернуть компоненты WSO2 как в инфраструктуре своей организации, так и в частном, публичном или гибридном облаке. Поддержка облачных технологий заложена в основу архитектуры решений WSO2.

Видео:What is WSO2?Скачать

What is WSO2?

Готовые решения WSO2

Каждое решение состоит из отдельных элементов. Вы можете спроектировать собственную систему, используя компоненты WSO2 как кубики построения Enterprise-архитектуры.

Управление API

WSO2 API Manager — это корпоративное решение, поддерживающее публикацию API, управление жизненным циклом, разработку приложений, управление доступом, ограничение скорости и аналитику в интегрированном комплексе.

Интеграция

WSO2 Enterprise Integrator — мощная интеграционная шина. Она обеспечивает обмен и преобразование данных между системами, SaaS-приложениями, сервисами и API. Решение включает ESB, брокер сообщений, сервер приложений, сервер служб данных, сервер исполнения бизнес-процессов и платформу для размещения микросервисов msf4j.

Идентификация и управление доступом

WSO2 Identity Server эффективно выполняет сложную задачу управления идентификацией, безопасностью и конфиденциальностью для корпоративных приложений, сервисов и API.

Умная аналитика

Интеллектуальный и высокоэффективный анализ продуктовых данных в реальном времени. WSO2 Data Analytics Server позволяет обрабатывать данные, идентифицировать шаблоны и реагировать в течение милисекунд.

Интернет вещей (IoT)

Теперь мобильные устройства и бытовая электроника могут быть частью вашего бизнеса.

WSO2 IoT Server позволяет подключаться и управлять своими устройствами. Можно управлять приложениями, настройками безопасности и данными, предусмотрена визуализация данных со счетчиков.

Видео:Интеграционные шиныСкачать

Интеграционные шины

Ключевые продукты WSO2

Видео:Вадим Фоминых. Интегрируй этоСкачать

Вадим Фоминых. Интегрируй это

Для каких задач подходит WSO2

При каких типах архитектуры используется WSO2?

Читайте также: Размеры шины 215 50 r17 в см

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

Какое количество систем можно подключить? Какие ограничения есть?

Какое количество транзакций может осуществлять система?

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

Что с настройкой доступа групп и конкретных пользователей?

Есть возможность сделать RBAC — Role Based Access Control.

Насколько сложно настроить и запустить такую кучу компонентов?

Все компоненты построены на одной платформе — Carbon. Поэтому всё программирование можно свести к работе с админкой — всё можно создать через неё. Все настройки тщательно и подробно описаны в документации.

Какова совокупная стоимость продукта? Что входит в стоимость?

В стоимость входит:
1. Саппорт первого уровня на русском
2. Поддержка WSO2 на уровне 24 на 7
3. Периодические патчи с исправлениями
4. Периодические патчи безопасности

Видео:Плюсы и минусы сервисной шины данных I Enterprise service bus (ESB) I kt.teamСкачать

Плюсы и минусы сервисной шины данных I Enterprise service bus (ESB) I kt.team

Web-приложение WSO2 — добавляем шину — Web-приложение WSO2 — добавляем шину

Видео:Шины - ключевой элемент качественной архитектуры | Андрей ПутинСкачать

Шины - ключевой элемент качественной архитектуры | Андрей Путин

В прошлых постах серсии мы рассмотрели:

Теперь рассмотрим как реализовать проверку прав доступа на уровне доступа к данным. Для этого мы будем использовать интеграционную шину WSO2 ESB.

Видео:E4 или другие E1, E2, E3 и т.д., что это?Скачать

E4 или другие E1, E2, E3 и т.д., что это?

Для чего нужна интеграционная шина

По идее, сам сервер WSO2 DSS имеет возмоность авторизовать доступ к сервисам — зачем нам промежуточный слой? На самом деле в данном случае — это просто пример. Но, при разработке сложных корпортативных информационных систем является правилом хорошего тона избегать прямого взаимодействия между системами. Иначе возникает интеграционное спаггети.

Wso2 шина что это

Использование шины позволяет упорядочить и централизовать все взаимодействие между системами, реализовав его в единой системе — интеграционной шине. Это позволяет разделить потребителей сервисов от их реализации. В нашем случае подобное разделение позволит, например, в будующем заменить сервис работы с базой (для хранения информации о пациентах) на какую-нибудь внутреннюю медецинскую систему, да еще работающую по собственному протоколу. Все изменения по взаимодействию с системой будут реализованы на строне шины, со сторону потребителя информации (нашего веб-приложения) ничего не изменится.

Wso2 шина что это

Одно из основных назначений шины — это реализация Proxy Service — в нашем случае это будет сервис между веб-приложением и WSO2 DSS на котором будет реализована авторизация запросов.

Wso2 шина что это

Видео:WSO2 QuickStart ProgramСкачать

WSO2 QuickStart Program

Реализация Proxy Service-а

Для реализации будем использвать WSO2 ESB 4.9.0 — скачать можно с сайта WSO2. Установка шины описана в одном из предыдущих постов — она штатная.

Не забываем прописать Offset=3 в repository/conf/carbon.xml — таким образом сервер не будет конфликтовать с другими серверами WSO2 использующимися в примере. Соответсвенно панель администратора будет доступна по адресу: https://144.76.92.85:9446/carbon

Далее для создания простейшего Proxy Service:

  • входим в админку (admin/admin)
  • Main -> Manage -> Services -> Add -> Proxy Service
  • Выбираем Pass Through Proxy
  • Для создания сервиса нам надо знать исходный End-Point — для этого заходим в админку WSO2 DSS, идем в сервисы, кликаем на нашем сервисе и копируем URL end-point-а ( в нашем случае https://localhost:9445/services/WSO2HealthIT/) :

Wso2 шина что это

  • В WSO2 ESB при создании сервиса указываем имя: WSO2HealthITProxy и его end-point

Wso2 шина что это

  • Кликаем Create — простейший Proxy Service готов.

Видео:WSO2 Device Cloud - What can you do with it?Скачать

WSO2 Device Cloud  - What can you do with it?

Изменения в Веб-Приложении

В нашем приложении мы захардкодили URL сервиса в двух местах:

  1. QueryPatientDetailServlet.java — переменная dataServiceEP
  2. RegisterPatientServlet.java — DSSServerURL

Читайте также: Солдат не дано шины ребенок

Заменим обе переменные на новый URL : http://localhost:8283/services/WSO2HealthITProxy (который теперь указывает на шину).

Деплоим приложение — проверяем что все продолжает работать. При этом в админке шины в информации о нашем proxy service-е мы можем увидеть, что работа идет именно через него (через статистику)

Wso2 шина что это

Видео:Introduction to WSO2 Stream Processor StudioСкачать

Introduction to WSO2 Stream Processor Studio

Интеграция XACML в Proxy Service

Как мы помним — штатным средством для описания прав доступа является протокол XACML — дальше мы научим шину управляеть доступом к сервису используя этот протокол.

Передача авторизационной информации из веб-приложения

Но для начала необходимо передать информацию о пользователе из приложения в шину. Для этого вносим изменения в классы QueryPatientDetailServlet и RegisterPatientServlet и инициализацию сервиса — добавляем информацию о пользователе в header-ы запроса

В дальнейшем ESB получит эти данные из заголовка и будет знать, «кто» вызвал сервис.

Добавляем Entitlement медиатор в Proxy Service

Теперь вносим изменения в наш Proxy Service. Кликаем Edit на странице сервиса.

Можно использовать графический редактор, но на практике проще использовать XML-редактор (Switch to Source View в редакторе).

Для начала нам надо получить пользователя из заголовка:

Далее добавляем сам сервис

Итак — аналогично EntitlementFilter в веб-приложении мы обращаемся к WSO2 IS ( https://localhost:9444/services ) запрашивая информацию может ли указанный пользователь выполнять текущую операцию или нет.

  • onReject — мы генерируем ошибку (makefault) которую потом обработаем в веб-приложении.
  • onAccept — мы передаем управление в исходный сервис

В out-sequence нам надо убрать заголовки запроса (относящиеся к безопасности и просто отправить ответ):

Добавляем правила доступа в WSO2 IS

Теперь надо добавить правиа доступа в WSO2 IS — аналогично тому, как мы это делали в свое время для веб-приложения

Логинимся в WSO2 IS (admin/admin) и далее Administration -> Add New Entitlement Policy -> write policy in XML

Берем dssOperationsProxy из исходников (https://github.com/akakunin/wso-health-tutorial/blob/3.0.x/is/dssOperationsPolicy.xml), сохраняем, далее «Publish to my PDP» и далее идем в Policy View и включаем Policy.

Не останавливаясь сейчас на формате XACML, в данном XML мы описали следующие правила:

Permissions user hasAccess URLAllow/ Deny
read.*/WSO2HealthITProxy/patientDetailsByNumberAllow
read.*/WSO2HealthITProxy/registerPatientDeny
write.*/WSO2HealthITProxy/patientDetailsByNumberAllow
write.*/WSO2HealthITProxy/registerPatientAllow

Видео:В чем Разница Между Двигателями FSI и TFSI от VAG GroupСкачать

В чем Разница Между Двигателями FSI и TFSI от VAG Group

Добавляем обработку ошибок

Последним шагом будет обработка ошибок.

Обработка ошибок DSS

Наш Proxy Service «оборачивает» вызов к DSS. Если «что-то пойдет не так» то в сервисе будет вызван faultSequence. По этому, в наш сервис необходимо добавить

Так же необходимо будет создать в ESB Sequence: Manage -> Sequences -> Add Sequence с именем wso2HealthITFaultHandler и кодом из репозитория: https://github.com/akakunin/wso-health-tutorial/blob/3.0.x/esb/wso2HealthITFaultHandler.xml )

Как итог — если с возникнет какая-либо ошибка ( на стороне DSS или например ошибка доступа) клиент в веб-приложении получит SoapFault Exception. Соотвественно везде где мы обращаемся к сервису нам необходимо добавить обработку Exception-а:

  • В QueryPatientDetailServlet надо добавить следующий обработчик:
  • RegisterPatientServlet — просто поймать Exception

Как итог данного упражнения, мы добавили шину для связи между сервисами данных и веб-приложением, в которой реализовали проверку прав доступа и обработку ошибок.

  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле
    • Правообладателям
    • Политика конфиденциальности

    📺 Видео

    Корпоративная сервисная шина данных DATAREON ESB. Знакомство с объектами ESB. Урок 2Скачать

    Корпоративная сервисная шина данных DATAREON ESB. Знакомство с объектами ESB. Урок 2

    Обзор возможностей интеграционной шины на базе программных продуктов с открытым кодомСкачать

    Обзор возможностей интеграционной шины на базе программных продуктов с открытым кодом

    Корпоративная сервисная шина данных DATAREON ESB. Алгоритм работы подсистемы 1С. Урок 6Скачать

    Корпоративная сервисная шина данных DATAREON ESB. Алгоритм работы подсистемы 1С. Урок 6

    Шина данных i2c - декодируем/синхронизируем с помощью осциллографа Lecroy!Скачать

    Шина данных i2c - декодируем/синхронизируем   с помощью осциллографа Lecroy!

    Как подобрать моторное масло? Что такое API и ACEA. Можно ли доливать моторное масло?Скачать

    Как подобрать моторное масло? Что такое API и ACEA. Можно ли доливать моторное масло?
Поделиться или сохранить к себе:
Технарь знаток