- Задача
- Решение
- Дополнительно
- Нерешённые вопросы
- WSO2 — один из самых значимых вендоров интеграционных решений в мире
- Forrester
- Gartner
- WSO2 это
- Готовые решения WSO2
- Управление API
- Интеграция
- Идентификация и управление доступом
- Умная аналитика
- Интернет вещей (IoT)
- Ключевые продукты WSO2
- Для каких задач подходит WSO2
- Web-приложение WSO2 — добавляем шину — Web-приложение WSO2 — добавляем шину
- Навигационные полоски
- Для чего нужна интеграционная шина
- Реализация Proxy Service-а
- Изменения в Веб-Приложении
- Интеграция XACML в Proxy Service
- Передача авторизационной информации из веб-приложения
- Добавляем Entitlement медиатор в Proxy Service
- Добавляем правила доступа в WSO2 IS
- Добавляем обработку ошибок
- Обработка ошибок DSS
- 📺 Видео
Задача
Есть приложение, которое может запрашивать данные по определённому протоколу и есть сервис, который может отдавать данные, но по другому протоколу и требует авторизации по логину и паролю.
В приложении нет учётных данных необходимых для доступа к сервису. Необходимо подружить приложение и сервис.
Решение
Использовать шину: 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Скачать
WSO2 — один из самых значимых вендоров интеграционных решений в мире
Видео:Демонстрация возможностей WSO2 Identity ServerСкачать
Forrester
По 24 критериям были выбраны 11 поставщиков интеграционных решений. В отчете подробно проанализировано и оценено, как каждый из них помогает пользователям выстроить корпоративную архитектуру.
Видео:Цифровизация вашей компании при помощи 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?Скачать
Готовые решения 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Скачать
Web-приложение WSO2 — добавляем шину — Web-приложение WSO2 — добавляем шину
Видео:Шины - ключевой элемент качественной архитектуры | Андрей ПутинСкачать
Навигационные полоски
В прошлых постах серсии мы рассмотрели:
Теперь рассмотрим как реализовать проверку прав доступа на уровне доступа к данным. Для этого мы будем использовать интеграционную шину WSO2 ESB.
Видео:E4 или другие E1, E2, E3 и т.д., что это?Скачать
Для чего нужна интеграционная шина
По идее, сам сервер WSO2 DSS имеет возмоность авторизовать доступ к сервисам — зачем нам промежуточный слой? На самом деле в данном случае — это просто пример. Но, при разработке сложных корпортативных информационных систем является правилом хорошего тона избегать прямого взаимодействия между системами. Иначе возникает интеграционное спаггети.
Использование шины позволяет упорядочить и централизовать все взаимодействие между системами, реализовав его в единой системе — интеграционной шине. Это позволяет разделить потребителей сервисов от их реализации. В нашем случае подобное разделение позволит, например, в будующем заменить сервис работы с базой (для хранения информации о пациентах) на какую-нибудь внутреннюю медецинскую систему, да еще работающую по собственному протоколу. Все изменения по взаимодействию с системой будут реализованы на строне шины, со сторону потребителя информации (нашего веб-приложения) ничего не изменится.
Одно из основных назначений шины — это реализация Proxy Service — в нашем случае это будет сервис между веб-приложением и WSO2 DSS на котором будет реализована авторизация запросов.
Видео: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 ESB при создании сервиса указываем имя: WSO2HealthITProxy и его end-point
- Кликаем Create — простейший Proxy Service готов.
Видео:WSO2 Device Cloud - What can you do with it?Скачать
Изменения в Веб-Приложении
В нашем приложении мы захардкодили URL сервиса в двух местах:
- QueryPatientDetailServlet.java — переменная dataServiceEP
- RegisterPatientServlet.java — DSSServerURL
Читайте также: Солдат не дано шины ребенок
Заменим обе переменные на новый URL : http://localhost:8283/services/WSO2HealthITProxy (который теперь указывает на шину).
Деплоим приложение — проверяем что все продолжает работать. При этом в админке шины в информации о нашем proxy service-е мы можем увидеть, что работа идет именно через него (через статистику)
Видео: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 has | Access URL | Allow/ Deny |
---|---|---|
read | .*/WSO2HealthITProxy/patientDetailsByNumber | Allow |
read | .*/WSO2HealthITProxy/registerPatient | Deny |
write | .*/WSO2HealthITProxy/patientDetailsByNumber | Allow |
write | .*/WSO2HealthITProxy/registerPatient | Allow |
Видео:В чем Разница Между Двигателями 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. Алгоритм работы подсистемы 1С. Урок 6Скачать
Шина данных i2c - декодируем/синхронизируем с помощью осциллографа Lecroy!Скачать
Как подобрать моторное масло? Что такое API и ACEA. Можно ли доливать моторное масло?Скачать