Перейти к содержанию

Учебные пособия по сценариям

Сценарий 1. Создание REST API из OpenAPI

User story

Coltrain — одна из железнодорожных компаний, которая сотрудничает с GOGO Train для предоставления лучшего сервиса своим клиентам. У Coltrain уже есть несколько внутренних управляемых API, развернутых в компании, которые обслуживаются их внутренней командой разработчиков. Одним из API является API для получения расписания поездов, предназначенный для публичного доступа, чтобы пользователи могли запрашивать актуальные расписания поездов компании Coltrain. В настоящее время этот API открытом доступе, и команда разработчиков Coltrain сталкивается с трудностями в обслуживании и обработке высокой нагрузки на API.

Публикуя этот API через NEOMSA APIM , компания Coltrain ожидает получить все преимущества решения по управлению API, такие как управление жизненным циклом API, безопасность, ограничение частоты запросов т. д., а также разгрузить внутренние команды от задач по его обслуживанию.

NEOMSA APIM предоставляет возможность импортировать спецификации OpenAPI и создавать API на их основе.

Тестирование бэкенда

Сначала протестируем бэкенд. Вы можете выполнить следующую команду curl и получите ответ с элементами расписания.

curl "http://localhost:8082/train-operations/v1/schedules"

Вы получите следующий ответ.

[{"entryId":"1","startTime":"14:50","endTime":"19:59","from":"London","to":"Glasgow","trainType":"Standard"},{"entryId":"2","startTime":"14:30","endTime":"19:20","from":"London","to":"Edinburgh","trainType":"1st class"},{"entryId":"3","startTime":"11:10","endTime":"12:59","from":"London","to":"Cardiff","trainType":"Standard"},{"entryId":"4","startTime":"08:30","endTime":"10:50","from":"London","to":"Manchester","trainType":"1st class"}]

Это означает, что бэкенд работает нормально. Далее, давайте опубликуем этот API через NEOMSA APIM .

Развертывание API через NEOMSA APIM

  1. Войдите на сайт https://localhost:9443/publisher/apis, используя пользователя Coltrain publisher. Используйте логин: apiprovider@coltrain.com и пароль: user123.

  2. Выберите опцию Импортировать Open API в разделе REST API.

  1. Выберите переключатель OpenAPI File\Archive и загрузите coltrain-public-openapi.yaml из папки /resources.

  1. Заполните область контекст (например, /coltrain) и создайте API. Оставьте эндпоинт без изменений. Вы можете проверить статус URL-адреса бэкенда, установив флажок перед эндпоинтом.

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

Удаление аутентификации для ресурса

Для этого выполните следующие действия:

  1. Перейдите на вкладку Разработка → Конфигурация API → Ресурсы.

  2. Расширить ресурс.

  3. В разделе «Управление операцией» отключите переключатель «Безопасность»

  1. Сохраните API.

Перед публикацией разработчики Coltrain хотят протестировать этот API. NEOMSA APIM предоставляет тестовую консоль для тестирования API, на этапе разработки.

Развертывание API в шлюзе

Перед тестированием API необходимо развернуть в шлюзе. Сначала необходимо выбрать бизнес-план для API. Для этого перейдите в раздел Разработка → Бизнес-планы, выберите Unlimited и сохраните. После этого перейдите в раздел Развертывания и выберите Развертывать. Это развернет API в шлюзе, но он пока не будет доступен внешнему миру.

Тестирование API

Теперь мы готовы протестировать API. Перейдите в раздел Проверять → Протестировать. Это откроет консоль API в портале Publisher для тестирования API.

Разверните ресурс /schedules и вызовите API. Вам не нужно нажимать Создать ключ, так как мы отключили безопасность для этого ресурса. Если вы хотите протестировать ресурс /schedules/{id}, вам потребуется сгенерировать ключ.

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

Публикация API

API необходимо опубликовать, чтобы получить к нему доступ с портала разработчика. Для этого

Перейдите в раздел «Жизненный цикл» и выберите «Публиковать».

Теперь API опубликовано. Чтобы просмотреть этот API, перейдите по адресу https://localhost:9443/devportal/ на портал разработчика и выберите домен клиента Coltrain . Это перенаправит вас на портал разработчиков Coltrain.

Выберите ColTrainScheduleCommunityAPI и нажмите кнопку Проверка в левом меню. Это откроет встроенную консоль API для этого API, где вы сможете протестировать его, выбрав нужные ресурсы.

Сценарий 2. Включение контроля доступа к API

User story

ColTrain имеет отдельный API для управления расписаниями для своего внутреннего персонала. Этот API требует более высоких разрешений для доступа по сравнению с их публичным API. Все сотрудники ColTrain имеют доступ к приложению пользователя, где они могут просматривать расписания поездов через этот API. Все сотрудники должны иметь возможность проверять доступные расписания, но только администраторы могут добавлять, редактировать или удалять существующие расписания. Любой другой зарегистрированный или публичный пользователь не должен иметь возможности просматривать этот API, поскольку он предназначен для внутренних задач. Coltrain хочет четко разделить, кто может просматривать и использовать их API. Они пришли к выводу, что было бы слишком трудоемко реализовывать это напрямую для их backend API с нуля. Поскольку теперь они используют платформу управления API, они хотели перенести все задачи аутентификации и авторизации за пределы своих внутренних API, что упростит работу внутренних команд, позволяя им сосредоточиться на бизнес-логике своих API.

Мы можем настроить API так, чтобы он был доступен только определённым пользователям. Например, этот API должен быть доступен только для пользователей портала разработчиков с ролью coltrain_employee.

Также NEOMSA APIM позволяет контролировать доступ к ресурсам API с помощью OAuth2. Запросы, содержащие токены доступа с правильным скоупом, смогут получить доступ к этим ресурсам.

Примечание

Эта настройка содержит роли schedule_admin и coltrain_employee, уже созданные в домене клиента ColTrain. Роли schedule_admin и coltrain_employee назначены пользователю jenny@coltrain.com, и только роль coltrain_employee назначена пользователю george@coltrain.com.

Создание API с ограничениями ролей

Давайте создадим новый API под названием ColTrainInternalTimeTableAPI и настроим его видимость на основе ролей.

  1. Зайдите в портал издателя https://localhost:9443/publisher/. Используйте логин: apiprovider@coltrain.com и пароль: user123.

  2. Создайте новый API, используя файл OpenAPI coltrain-openapi.yaml, который находится в каталоге /resources. Используйте /coltrain-schedule в качестве контекста. Используйте конечную точку, предоставленную в файле, как она есть.

  1. Перейдите в Разработка → Настройки Портала → Базовая Информация и в Видимость портала разработчиков выберите Ограничить по ролям. Это позволит включить еще одно поле для установки роли. Используйте coltrain_employee, нажмите Enter и сохраните.

Теперь видимость API установлена на портале разработчиков. Пользователи с ролью coltrain_employee теперь могут просматривать API на портале разработчиков.

: Настройка контроля доступа к ресурсам

Следующий шаг — установить контроль доступа к ресурсам. Для этого выполните следующие действия.

  1. Создайте область, выбрав Разработка → Настройки API → Локальные Области, и создайте область, используя приведенные ниже данные. Используйте schedule_admin в качестве роли.

  1. Перейдите в раздел Разработка → Настройки API → Ресурсы и назначьте роль соответствующему ресурсу. Например, чтобы назначить роль schedule_admin для ресурса POST /schedule, выберите этот ресурс для развертывания и выберите роль из выпадающего меню Операционное управление .

  1. Определите бизнес-план для API. Для этого перейдите в Разработка → Настройки портала → Подписки и выберите бизнес-план. (например, Unlimited).

  2. Разверните API. Для этого перейдите в раздел Развертывание → Развертывания и нажмите развернуть.

  3. Опубликуйте API с помощью опции Опубликовать → Жизненный цикл.

Теперь зайдите на портал разработчиков и перейдите на домен ColTrain. Вы не сможете увидеть API ColTrainInternalTimeTableAPI.

Давайте войдем в систему, используя логин: jenny@coltrain.com, пароль: user123. Теперь вы должны увидеть API.

У Дженни есть роль coltrain_employee , поэтому она может просматривать API.

Тестирование API

Теперь давайте попробуем API.

  1. Войдите на портал разработчиков, используя логин: jenny@coltrain.com и пароль: user123.

  2. Перейдите в раздел Приложения → Добавить новое приложение, создайте приложение и сгенерируйте ключи доступа.

  3. Скопируйте ключ и секрет. Секрет можно просмотреть, нажав на иконку рядом с разделом Consumer Secret.

  1. Подпишитесь на API, используя созданное приложение

Теперь мы попробуем получить доступ к этому API, используя два разных токена доступа, сгенерированных двумя разными пользователями. У пользователя jenny@coltrain.com есть роль schedule_admin. У пользователя george@coltrain.com этой роли нет.

Поскольку ресурс POST /schedule защищен с помощью области (scope) schedule_admin, создадим токены доступа с этой областью, используя ранее сгенерированные clientid и secret. Используйте следующие команды.

Для Дженни:

curl -k -X POST https://localhost:9443/oauth2/token -d "grant_type=password&username=jenny@coltrain.com&password=user123&scope=schedule_admin" -H "Authorization: Basic Base64(consumer-key:consumer-secret)"

Для Джорджа:

curl -k -X POST https://localhost:9443/oauth2/token -d "grant_type=password&username=george@coltrain.com&password=user123&scope=schedule_admin" -H "Authorization: Basic Base64(consumer-key:consumer-secret)"

Если проверить ответы на два приведенных выше запроса, можно увидеть, что для первого ответа (для Дженни) будет указана область schedule_admin.

Вызовите ресурс POST, используя каждый токен.

curl -X POST "https://localhost:8243/t/coltrain.com/coltrain-schedule/1.0.0/schedules" -H  "Content-Type: application/json" -H  "Authorization: Bearer <token>" -d "{\"entryId\":\"10\",\"startTime\":\"18:30\",\"endTime\":\"20.30\",\"from\":\"London\",\"to\":\"Oxford\",\"trainType\":\"Standard\"}"

Вы увидите, что можете получить доступ к ресурсу, используя токен пользователя jenny@coltrain.com , а для токена Джорджа вы получите сообщение об ошибке.

{"code":"900910","message":"The access token does not allow you to access the requested resource","description":"User is NOT authorized to access the Resource: /schedules. Scope validation failed."}

Вы также можете протестировать те же команды, используя коллекцию Postman, доступную по адресу: resources/Access_Control_Demo.postman_collection.json. Для этого нужно добавить client_id и client_secret в раздел переменных для использования этой коллекции.

Сценарий 3. Регистрация нового пользователя

User story

Компания Quantis предоставляет внешним пользователям доступ к своим API. Чтобы облегчить использование этих API, они решили открыть регистрацию для внешних пользователей. Это позволит избежать необходимости вводить все данные для каждого нового пользователя/потребителя, что может быть трудоемким процессом. Теперь пользователи смогут зарегистрироваться в системе, но их заявки будут одобряться администратором после ручной проверки. Такой подход поможет Quantis контролировать процесс регистрации и, как ожидается, приведет к увеличению доходов в будущем.

Настройка процесса самостоятельной регистрации

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

В этой демонстрационной настройке самостоятельной регистрация и рабочий процесс регистрации уже настроены для домена арендатора Qantis.

Примечание

: Вы можете проверить, что UserSignUpApprovalWorkflowExecutor теперь задействован, если войдете на https://localhost:9443/carbon, используя учетные данные администратора Qantis (admin@qantis.com:admin ), и перейдете по пути /_system/governance/apimgt/applicationdata/workflow-extensions.xml.

Проверка процесса регистрации

Чтобы выполнить тестирование, выполните следующие действия.

  1. Перейдите на портал разработчиков https://localhost:9443/devportal/ и выберите домен клиента Qantis.

  2. Нажмите кнопку «Войти» в правом верхнем углу. Это откроет страницу регистрации.

  3. Выберите «Создать учетную запись».

  4. Добавьте желаемое имя пользователя (с доменом арендатора) и продолжите регистрацию. Например, вы можете использовать raj@quantis.com.

  1. Заполните все обязательные поля и продолжите регистрацию.

  2. Если вы попытаетесь войти с этими учетными данными, вам будет показана страница с сообщением "Неавторизованный доступ".

Одобрение запроса на регистрацию

Чтобы одобрить запрос на регистрацию, выполните следующие действия.

  1. Войдите в портал администратора https://localhost:9443/admin/, используя логин: admin@quantis.com и пароль admin.

  2. В разделе Задача → Создание пользователя вы увидите ожидающую задачу. Одобрите ее.

  1. Теперь вы сможете войти на портал разработчиков, используя логин raj@quantis.com имя и его пароль.

Сценарий 4. Привлечение сообщества разработчиков

User story

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

Портал разработчиков NEOMSA APIM предлагает множество функций, помогающих разработчикам использовать опубликованные API. Например:

  • Генерация SDK для API

  • Документация по API

  • Возможность оставлять оценки и комментарии

  • Консоль API для тестирования API

Настройка и тестирование функций сообщества разработчиков

В этой демонстрации представлен пример API, который демонстрирует указанные функции. Войдите в портал разработчиков Quantis, используя пользователя Quantis логин: sindy@quantis.comс, пароль: user123, и проверьте QuantisTrainAPI .

Вы можете создавать клиентские SDK для разных языков программирования. Мы предоставили пример программы на Java, созданной с использованием Java SDK, загруженного из QuantisTrainAPI.

  1. Подпишитесь на QuantisTrainAPI с помощью приложения и сгенерируйте токен доступа.

  2. Перейдите в папку /resources и вызовите API, используя токен доступа sdk-demo-1.0.0.jar.

    java -jar sdk-demo-1.0.0.jar <access_token>
    

Информация

Sdk-demo-1.0.0.jar создан с использованием Java SDK, загруженного с портала разработчиков. Вы можете ознакомиться с исходным кодом этой программы в папке /resources/sdk-demo месте

Когда вы загружаете SDK с портала разработчиков (например, Java SDK), вы можете собрать его и использовать как зависимость в своем проекте. В этом примере использовался SDK для QuantisTrainAPI (QuantisTrainAPI_1.0.0_java.zip) собранный с помощью Apache Maven.

Затем вы можете добавить следующую зависимость в свой проект для импорта SDK.

<dependency>
  <groupId>org.wso2</groupId>
  <artifactId>org.wso2.client.QuantisTrainAPI</artifactId>
  <version>1.0.0</version>
</dependency>

Пример кода для вызова API с использованием этого SDK можно найти в resources/sdk-demo/src/main/java/org/wso2/carbon/apimgt/tutorial/App.java.

Сценарий 5. Аналитика

User story

Компания GOGO Transit обнаружила новую бизнес-возможность. Данные о прибытии поездов содержат информацию о количестве пассажиров, которые прибывают на станцию. Эти данные можно использовать для прогнозирования, сколько людей будет на станции в разное время. Это поможет местным предприятиям, таким как магазины и такси, лучше планировать количество сотрудников, необходимых для обслуживания клиентов. В связи с этим GOGO Transit решает создать API, который предоставит данные о пассажирах общественности с возможностью подписки, которая приносит доход в зависимости от количества успешных запросов выполненных за определенный период времени.

Choreo APIM Analytics можно использовать для сбора статистики и анализа работы API Manager. Это облачное аналитическое предложение для развертываний Choreo API Manager и On-Prem API Manager.

Настройка аналитики

Прежде чем начать...

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

Чтобы настроить аналитику,

  1. Зарегистрируйтесь по адресу https://console.choreo.dev/login/.

  2. Перейдите по адресу https://console.choreo.dev/user-settings/onpremkeys и сгенерируйте ключ.

  3. Откройте файл /dockerfiles/conf/apim/repository/conf/deployment.toml и обновите конфигурацию [apim.analytics], как показано ниже.

    [apim.analytics]
    enable = true
    config_endpoint = "https://analytics-event-auth.choreo.dev/auth/v1"
    auth_token = "<on prem key>"
    
  4. Перезапустите контейнер api-manager с помощью следующей команды.

    docker-compose restart api-manager
    

Проверка

Давайте сгенерируем трафик. Мы развернули API ( PassengerInfoAPI ) в домене супер-арендатора.

  1. Перейдите по адресу https://localhost:9443/devportal/ и выберите домен арендатора carbon.super.

  2. Войдите в систему, используя логин: peter и пароль: user123, подпишитесь на API PassengerInfoAPI и сгенерируйте токен доступа.

  3. Вызовите API с помощью токена.

    curl -X GET "https://localhost:8243/info/1.0.0/passenger-count" -H "accept: application/json" -H "Authorization: Bearer <token>" -k
    

Перейдите в Choreo Insights, чтобы просмотреть статистику. Ниже приведены некоторые графики.

Сценарий 6. Ограничение частоты запросов

User story

Команда DevOps компании GOGO анализируя трафик и данные заметила, что их сервер получает слишком много запросов, что приводит к увеличению задержек в работе. Проведя тесты производительности, они выяснили, что их сервис может обрабатывать максимум 1000 транзакций в секунду (TPS) В связи с этим руководство GOGO решило ввести ограничения на частоту запросов для бесплатных пользователей.

Настройка политики ограничения частоты запросов

NEOMSA APIM предоставляет различные уровни ограничения частоты запросов. В данном случае мы применим политику ограничения частоты запросов для подписок и установим максимальную пропускную способность для API PassengerInfoAPI.

Чтобы создать политику ограничения частоты запросов на уровне подписки, выполните следующие действия:

  1. Войдите в портал администратора по адресу: https://localhost:9443/admin, используя логин: admin и пароль: admin.

  2. Перейдите в Политика ограничения запросов → Политика подписки и создайте новую политику. Ниже приведен пример политики.

  1. После создания политики, чтобы применить ее к API, зайдите на портал издателя (Publisher), используя логин: apiprovider пароль: user123, и перейдите в раздел Разработка → Конфигурация портала → Подписки .

  2. Примените политику к PassengerInfoAPI и сохраните API.

  1. Теперь войдите в портал разработчика, создайте приложение и попробуйте подписаться на API. Вы заметите, что доступна недавно созданная политика.

  2. Подпишитесь на API, используя эту политику, и вызовите API с помощью сгенерированного токена.

  1. Если вы сделаете более 10 запросов, получите сообщение о превышении лимита.

Настройка максимальной пропускной способности

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

  1. Войдите на портал издателя (Publisher), выберите API и перейдите в раздел Разработка → Настройки API → Время выполнения.

  2. В разделе Бэкенд установите максимальное количество TPS для бэкенда. Для примера, чтобы быстро увидеть результаты, установим этот лимит на 1 TPS и сохраним этот API

  1. Чтобы изменения вступили в силу, создайте новую ревизию для этого API. Для этого перейдите в Развертывания → Развернуть и разверните новую ревизию.

  2. Теперь вызовите API с высокой частотой (более одного запроса в секунду), используя ранее сгенерированный токен.

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

{
  "code": "900801",
  "message": "API Limit Reached",
  "description": "API not accepting requests"
}

Это показывает, что API Manager ограничивает запросы к бэкенду.

Сценарий 7. Уведомления с использованием WebHooks

User story

GoGo Transit периодически отправляет уведомления железнодорожным компаниям (например, о закрытии платформ или изменении тарифов и т.д.) Для упрощения этого процесса GoGo Transit планирует использовать WebHooks, чтобы компании могли подписываться на уведомления и не проверять информацию постоянно.

WebHooks обеспечивают только одностороннюю связь, от вызывающего веб-приложения к вызывающему веб-приложению. Клиент, желающий получать события от сервера/веб-приложения/издателя, должен зарегистрировать свой URL-адрес для интересующих его событий в издателе. Когда событие происходит, если клиент зарегистрирован, издатель отправляет HTTP POST запрос на указанный URL клиента, для уведомления о событии.

Вы можете просмотреть API WebHook, созданный в NEOMSA APIM , перейдя в раздел издателя (Суперарендатор- admin). https://localhost:9443/publisher/apis

Вы можете публиковать уведомления по различным темам.

Подписка на API

Чтобы подписаться на API, необходимо зайти на портал разработчиков.

  1. Перейдите на портал разработчиков и выберите домен Carbon.super. Это перенаправит вас на Портал разработчика суперарендатора.

  2. Войдите в систему с правами суперарендатора, на портал разработчиков. Используйте логин: peter и пароль: user123.

  3. Нажмите NotificationAPI, затем нажмите «Подписаться, используя политику», и сгенерируйте токен доступа.

Настройка уведомлений

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

  1. Для этой цели вы можете использовать https://webhook.site/. Вы можете использовать уникальный URL-адрес сайта WebHook, чтобы подписаться на общий топик.

  2. Перейдите на вкладку «Проверка» и введите следующие данные в общий топик.

  1. Нажмите Создать завиток , скопируйте команду curl и запустите ее в своем терминале. Это подпишет вашего клиента (сайт WebHook) на API Manager. Вы можете убедиться, что подписка прошла успешно, проверив событие, полученное на сайте WebHook

Отправка уведомлений

Чтобы отправить уведомление, вам необходимо получить от издателя URL-адрес обратного вызова для топика.

  1. Повторно войдите в систему издателя, используя учетные данные администратора, и выберите NotificationAPI.

  2. Вы можете получить URL обратного вызова, посетив вкладку Темы и выбрав нужный вам топик. Поскольку вы подписались на общий топик выше, давайте получим URL для этого топика.

  1. Далее нужно перейти в раздел Subscription Configuration наверху и включить его. Нажмите кнопку Generate и создайте секрет. Этот секрет вам нужен для расчета значения hmac, которое вы будете отправлять в заголовке запроса.

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

    {"Message" : "Platform 12 on Braybrooke station will be closed for 2 hours on 2021-09-07T-15:50+00"}
    
  2. Далее необходимо рассчитать значение hmac для полезной нагрузки, используя секрет, который был сгенерирован в издателе. Это можно сделать это на сайте: https://www.freeformatter.com/hmac-generator.html (используйте SHA1).

  3. С полученным выше значением hmac вы можете вызвать следующий запрос, который отправит событие в общий топик. Это событие будет получено на сайте WebHook.

    curl -X POST 'http://localhost:9021/notification/1.0.0/webhooks_events_receiver_resource?topic=/general' \
    --header 'Accept: application/json' \
    --header 'x-hub-signature: sha1=<hmac value>' \
    --header 'Content-Type: application/json' \
    --data-raw '{"Message" : "Platform 12 on Braybrooke station will be closed for 2 hours on 2021-09-07T-15:50+00"}'
    

Сценарий 8. Поддержка GraphQL

User story

Компания Quantis стремится предоставить больше возможностей для разработчиков. Они ожидают, что разработчики создадут свои собственные мобильные и веб-приложения, используя их API. Чтобы упростить этот процесс, Quantis хочет сделать GraphQL API доступным для всех.

Создание GraphQL API

NEOMSA APIM поддерживает создание GraphQL API на основе схемы GraphQL. Следуйте этим шагам, чтобы создать пример API:

  1. Войдите на портал издателя https://localhost:9443/publisher, используя логин: apiprovider@quantis.com и пароль:user123.

  2. Выберите опцию Создать API → Импорт GraphQL SDL.

  1. Импортируйте train.graphql в папку /resources и создайте API. Используйте http://backend-service:8080/train-operations/graphql в качестве URL эндпоинта.

Публикация и тестирование API

  1. Разверните API и опубликуйте его.

  2. Перейдите на портал разработчика и перейдите в домен арендатора Quantis. На портале разработчиков вы увидите GraphQL API.

  1. Войдите в портал разработчиков Quantis, используя логин: bob@quantis.com, пароль:user123, и подпишитесь на API через приложение, чтобы получить токен доступа.

  2. Используйте вкладку Проверка, чтобы протестировать этот GraphQL API. Пример запроса:

      schedules {
        entryId
        from
        to
        trainType
      }
    }
    

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

Сценарий 9. Поддержка внешнего менеджера ключей

User story

Компания RailCo использует внутреннюю систему управления идентификацией и не хочет дублировать информацию о своих пользователях в двух системах. Вместо этого RailCo хочет использовать свой IDP (Identity Provider) для генерации токенов доступа, которые будут использоваться для доступа к их API, не импортируя пользователей на платформу API GOGO train.

NEOMSA APIM поставляется с готовыми коннекторами внешних менеджера ключей для различных поставщиков идентификации, таких как Okta, Auth0 и Keycloak и другие. Также, в нем предусмотрены интерфейсы для написания пользовательской реализации менеджера ключей, чтобы подключить любое внешнее решение стороннего менеджера ключей.

Для этого сценария считаем, что Railco использует Keycloak IDP в качестве внутреннего поставщика идентификации. Ниже приведены шаги по настройке Keycloak IdP как внешнего менеджера ключей RailCo.

Настройка Keycloak

Ниже приведены упрощенные шаги для настройки.

  1. Загрузите Keycloak Server с https://www.keycloak.org/downloads. (на момент написания используется версия keycloak 12.0.4.).

  2. Извлеките его в локальную среду, и перейдите в <keycloak>/bin, затем запустите скрипт ./standalone.sh для запуска сервера.

  3. Перейдите по адресу http://localhost:8080/. Если вы делаете это впервые, создайте первоначального пользователя-администратора из формы, приведенной на этой странице.

  4. Выполните следующую команду. Замените имя пользователя и пароль администратора. Это запустит скрипт на keycloak для генерации приложения на keycloak.

    docker run -e USER=<admin_username> -e PASSWORD=<admin_password> chamilaadhi/keycloak-apim-script:1.0.0
    

Если выполнение прошло успешно, вам будет предоставлен client id и client secret для использования с NEOMSA APIM .

client id    :  apim-client
client secret:  221f10b7-d169-45e0-851e-e1b017052162

Примечание: Скрипт, используемый в этом контейнере Docker для создания учетных данных, можно найти в файле /resource/setup-keycloak.sh.

Настройка подключение к Keycloak

Настройка подключения между API-M и Keycloak.

  1. Войдите в портал администратора https://localhost:9443/admin/, используя пользователя RailCo. Используйте логин: admin@railco.com и пароль: admin

  2. Перейдите в раздел «Менеджеры ключей» и выберите «Добавить менеджера ключей».

  3. Укажите подходящее имя и отображаемое имя.

  4. В раскрывающемся меню Тип менеджера ключей выберите Keycloak.

  5. Введите http://host.docker.internal:8080/auth/realms/master/.well-known/openid-configuration в поле Известный URL и нажать Импортировать. Это заполнит другие обязательные поля.

  6. Введите в поле «Display Revoke Endpoint» данные (если это поле не заполнено): http://host.docker.internal:8080/auth/realms/master/protocol/openid-connect/revoke

  7. В разделе «Конфигурации коннектора» укажите ID Client и Client Secret , которые получили при выполнении скрипта.

Теперь менеджер ключей настроен.

Вызов API

Давайте вызовем API, используя токен, сгенерированный Keycloak.

  1. Войдите на портал разработчиков домена клиента Railco https://localhost:9443/devportal/, используя логин: tom@railco.com и пароль: user123.

  2. Перейдите на страницу Приложения и выберите KeyCloakAPP. Это приложение уже подписано на RailCoTrainAPI.

  3. Выберите Ключи производства → Токены OAuth2. Вы увидите вкладку для Keycloak

  1. Нажмите «Сгенерировать ключи» , чтобы сгенерировать токен. (Значений по умолчанию будет достаточно для генерации токена доступа для этого сценария)

  2. Вызовите API, используя этот токен.