Автор — Марк Смит, специалист по CIAM, Okta.
Customer Identity Cloud (она же Auth0 Identity Platform), продуктовое подразделение компании Okta, использует современный подход к идентификации и позволяет организациям обеспечить безопасный доступ к любому приложению для любого пользователя. Auth0 — это высоко настраиваемая платформа, которая настолько проста, насколько хотят команды разработчиков, и настолько гибкая, насколько им нужно. В современном продуктовом ландшафте все чаще можно увидеть совместную работу Okta и Auth0. Это может быть в рамках одного предприятия, где Okta обрабатывает внутренние идентификационные данные сотрудников, а Auth0 заботится об идентификационных данных клиентов, или в межкорпоративных средах, таких как B2B, где бизнес-партнер может использовать как один, так и другой продукт.
Okta Workflows позволяет легко автоматизировать процессы идентификации в масштабе — без написания кода. Используя логику «если то-то и то-то», библиотеку готовых коннекторов Okta, Connector Builder и возможность подключения к любому общедоступному API, любой может внедрять инновации с Okta. В этой записи блога мы рассмотрим использование рабочих процессов Okta для упрощения интеграции между Okta и Auth0.
Пример использования
Давайте начнем с реального простого случая использования, чтобы мы могли посмотреть, как мы можем интегрировать эти два продукта. Могут быть ситуации, подобные B2B, когда одна и та же личность существует и в Okta, и в Auth0. Если личность деактивирована в одной среде, то другая среда должна знать об этом. Поэтому в нашем примере, если пользователь деактивирован в Okta, мы обновим метаданные пользователя в Auth0, чтобы указать на изменение статуса. Затем Auth0 может уловить это изменение и отказать пользователю в доступе.
Этот простой поток описан на следующей диаграмме.
На приведенной выше диаграмме последовательность обработки выглядит как потоки:
- Пользователь в Okta деактивируется (тот же пользователь также существует в Auth0).
- Выполняется вызов Okta для получения адреса электронной почты пользователя.
- Используя адрес электронной почты, мы вызываем Auth0 для получения уникального идентификатора пользователя Auth0.
- Используя идентификатор, мы обновляем метаданные пользователя, чтобы включить флаг, указывающий на то, что пользователь был деактивирован в Okta.
- Используя действие Auth0, мы проверяем метаданные пользователя во время входа в систему. Если метаданные указывают на то, что пользователь был деактивирован в Okta, то пользователю будет отказано в доступе.
Предварительные требования
Для реализации этого примера вам понадобится следующее:
- Арендатор Okta
- Арендатор Auth0
- Рабочие процессы Okta, включенные в вашем арендаторе Okta.
Шаг 1 — Создание приложения Auth0
В консоли управления Auth0 перейдите в раздел Applications и создайте новое приложение типа Machine to Machine. Это приложение будет использовать Auth0 Management API и должно иметь возможность читать и обновлять пользователей.
После создания обратите внимание на следующие значения.
- Домен
- Идентификатор клиента
- Секрет клиента
Вот пример:
Мы будем использовать эти значения в последующих шагах, где нам нужно будет сгенерировать токен доступа Auth0.
Шаг 2 — Загрузка и импорт образцов потоков
Образцы потоков, демонстрирующие данный сценарий использования, можно найти здесь: auth0UserMetaData.folder
Создайте папку в Okta Workflows и импортируйте артефакт под названием auth0UserMetaData.folder.
После импорта у вас должны быть следующие потоки:
- [main] User Deactivated — Это основной поток, который будет инициироваться каждый раз, когда пользователь в вашем соответствующем арендаторе Okta будет деактивирован.
- [util] Get Access Token — Этот вспомогательный поток используется для вызова вашего арендатора Auth0 для генерации Access Token.
- [util] Get Auth0 User Id — Этот вспомогательный поток используется для получения идентификатора Auth0 соответствующих пользователей на основе адреса электронной почты пользователей Okta.
- [util] Get Configuration — Этот вспомогательный поток извлекает некоторые статические значения из таблицы конфигурации.
- [util] Update Auth0 User — Этот вспомогательный поток используется для обновления пользователя Auth0 и установки флага в его пользовательских метаданных.
У вас также будет следующая таблица:
- configuration — Используется для хранения некоторых статических значений конфигурации
Шаг 3 — Обновление образцовых потоков и таблицы
Следующим шагом будет обновление таблицы конфигурации для включения пар имя/значение для domain, client_id и client_secret. Это значения, сохраненные в шаге 1. После завершения таблица конфигурации должна выглядеть так, как показано в следующем примере:
Примечание: Эти значения можно скрыть, включив часть логики Auth0 в собственный коннектор рабочего процесса. Эти значения могут быть использованы в авторизации коннектора и поэтому не будут доступны пользователям после инициализации коннектора.
Далее создайте коннектор Okta для вашего локального арендатора Okta, если он еще не существует в вашем экземпляре рабочего процесса.
Затем откройте поток под названием [main] User Deactivated и установите коннектор Okta для двух карточек Okta (User Deactivated и Read User). В качестве примера ниже показано начало основного потока примера. Мы видим, что карточки User Deactivated и Read User используют коннектор MS2 Okta. Обновите эти карточки, чтобы использовать свой собственный коннектор Okta.
Наконец, убедитесь, что все ваши потоки активированы.
Вот остаток моего основного потока:
Обработка основного потока происходит следующим образом:
- Используя переданный идентификатор пользователя, считывается информация о пользователе, чтобы получить его основную электронную почту.
- Вызов вспомогательного потока извлекает значения, хранящиеся в таблице конфигурации.
- Вызов вспомогательного потока извлекает токен доступа Auth0 на основе сохраненного домена, идентификатора клиента и секрета клиента. Этот вспомогательный поток использует поток Client Credential.
- Используя токен доступа, выполняется вызов вспомогательного потока для получения уникального идентификатора Auth0 пользователя.
- Наконец, вызов вспомогательного потока выполняется для обновления метаданных пользователя, чтобы указать, что пользователь был деактивирован в Okta.
Шаг 4 — Создание действия Auth0
Существует несколько способов предотвратить доступ пользователя к вашему сайту или приложению, защищенному Auth0. Одним из способов является использование Auth0 Actions для оценки метаданных пользователя во время входа в систему. На основе полученных значений можно запретить пользователю аутентификацию. Я привел пример ниже.
exports.onExecutePostLogin = async (event, api) => {
if (event.user.user_metadata.okta.deactivated === "true") {
api.access.deny(`Your account has been deactivated!`);
};
};
Тестирование рабочего процесса
Чтобы протестировать рабочий процесс, убедитесь, что у вас есть один и тот же пользователь, существующий в Okta и Auth0. Затем деактивируйте пользователя в Okta. После этого рабочий процесс должен запуститься и обновить метаданные пользователя в Auth0.
Вот пример обновленных метаданных:
Теперь, если вы попытаетесь аутентифицироваться как этот пользователь в Auth0, вам будет отказано.