Как автоматизировать выдачу доступа после обучения с помощью n8n и Keycloak
С чего всё началось
У нас есть внутренний сервис, доступ к которому сотрудник должен получить только после обязательного обучения.
В компании работает больше 1500 человек, поэтому проверять прохождение курса вручную - не вариант. Постоянно обновлять таблицу со статусами тоже не хотелось: её нужно вести, перепроверять и следить, чтобы никто не потерялся.
Кроме самого доступа, сотруднику нужно отправить письмо: сообщить, что сервис уже доступен, дать ссылку и коротко объяснить, как начать работу.
Для единого входа в корпоративные сервисы мы используем Keycloak, а весь процесс решили собрать в n8n.
Как устроена автоматизация
Сценарий получился довольно простым:
После завершения обучения всё происходит автоматически, без ручной выдачи доступов.
1. Следим за входящими письмами
Информация о прохождении курса приходит на почту, поэтому сценарий начинается с нода Email Trigger (IMAP).
Почтовый аккаунт подключаем через Credentials. В нашем случае используется mail.ru, поэтому для n8n мы создали отдельный пароль для внешнего приложения. Основной пароль от почты лучше нигде в автоматизациях не использовать.
Важный момент: В настройках триггера отключите автоматическую отметку писем как прочитанных. Нод срабатывает на каждое новое письмо. Если оставить эту настройку включённой, n8n будет читать письма за вас, а потом можно долго удивляться, почему во входящих нет непрочитанных сообщений.
2. Отбираем только нужные письма
Email Trigger получает все входящие письма, а нам нужны только уведомления об успешном прохождении курса.
Для фильтрации используем стандартный нод IF. В нашем случае достаточно проверить:
- отправителя;
- тему письма.
Нужные поля можно просто перетащить из входного JSON в условия нода. Когда проверка сложнее, можно использовать выражения n8n или JavaScript.
По основной ветке сценарий идёт дальше только в том случае, если письмо подходит под заданные условия.
3. Получаем токен Keycloak
Дальше начинается работа с Keycloak.
В нужном Realm создаём отдельный клиент для n8n и выдаём ему права, которых достаточно для поиска сотрудников и назначения ролей. Лишние права такому клиенту не нужны.
Данные клиента и остальные секреты сохраняем в Credentials, а не пишем прямо внутри workflow.
Для получения access token используем нод HTTP Request:
- метод —
POST; - адрес —
https://{DNS или IP Keycloak}/realms/{Realm}/protocol/openid-connect/token; - данные клиента передаются в
Body.
В ответ Keycloak возвращает access token. Он понадобится во всех следующих запросах.
4. Ищем сотрудника по почте
Из письма берём адрес сотрудника, который прошёл обучение, и ищем его в Keycloak.
Снова используем HTTP Request:
- метод —
GET; - адрес —
https://{DNS или IP Keycloak}/admin/realms/{Realm}/users; - почта передаётся в query-параметрах;
- access token передаётся в заголовке авторизации.
В ответ получаем данные сотрудника и его внутренний идентификатор. Именно по этому идентификатору дальше будет назначаться роль.
5. Получаем нужную роль
Вход в сервис зависит от роли в Keycloak. Поэтому перед назначением нужно получить саму роль через API.
Используем ещё одну ноду HTTP Request:
- метод —
GET; - адрес —
https://{DNS или IP Keycloak}/admin/realms/{Realm}/roles/{ID роли}; - название роли указываем в URL;
- access token передаём в заголовке авторизации.
В ответ получаем объект роли с её идентификатором и названием.
6. Назначаем роль сотруднику
На этом этапе у нас уже есть всё необходимое:
- сотрудник;
- его идентификатор в Keycloak;
- нужная роль;
- access token.
Остаётся отправить запрос на назначение роли:
- метод —
POST; - адрес —
https://{DNS или IP Keycloak}/admin/realms/{Realm}/users/{{ $('Get user').item.json.id }}/role-mappings/realm; - access token передаётся в заголовке;
- объект роли передаётся в
Body.
После успешного запроса сотрудник получает доступ к сервису.
7. Отправляем письмо сотруднику
После выдачи доступа важно сразу сообщить об этом сотруднику.
Для отправки используем стандартную ноду Send Email. SMTP-подключение, как и остальные учётные данные, настраиваем через Credentials.
Письмо формируем в HTML и добавляем в него:
- сообщение об открытии доступа;
- ссылку на сервис;
- короткую инструкцию по входу;
- описание основных возможностей;
- ссылку на документацию;
- контакт для вопросов.
В итоге сотрудник не просто получает роль в Keycloak, а сразу понимает, куда заходить и что делать дальше.
Почему мы не стали делать отдельный сервис
Для всей автоматизации понадобились стандартные ноды n8n и четыре запроса к Keycloak:
- получить access token;
- найти сотрудника;
- получить роль;
- назначить роль.
Поднимать ради этого отдельный сервис было бы избыточно. n8n позволил быстро собрать рабочий процесс и связать почту, систему обучения и Keycloak в одном месте.
Теперь сценарий выглядит так:
- сотрудник проходит курс;
- система обучения отправляет письмо;
- n8n проверяет уведомление;
- Keycloak назначает роль;
- сотрудник получает письмо с инструкцией.
Никаких ручных таблиц, проверок списков и отдельных запросов на выдачу доступа.
Что стоит учесть при работе с n8n
-
Отключайте автоматическое чтение писем. Это небольшая настройка, про которую легко забыть. Но если n8n работает с вашей основной почтой, она быстро становится заметной.
-
Собирайте ноды в единый сценарий. У нас большой опыт работы с Dynamo, поэтому поначалу хотелось переносить знакомую логику и в n8n. Но это другой инструмент. Не стоит оставлять ноды отдельно от основного потока, даже если кажется, что им не нужны данные предыдущего шага. У workflow должно быть понятное начало и последовательный маршрут выполнения.
-
Подписывайте публикации и изменения. При каждой публикации workflow оставляйте короткий комментарий: что поменяли и зачем.. Это похоже на комментарии к коммитам в Git. Когда сценарий начнёт развиваться, такие заметки сильно упростят поиск нужной версии и разбор изменений.
-
Не храните секреты внутри workflow. Пароли, client secret, SMTP-настройки, токены и другие закрытые данные должны лежать в Credentials. В самом workflow секретной информации быть не должно.
-
Используйте ИИ как помощника. Когда опыта с n8n ещё мало, ИИ хорошо помогает быстрее разобраться в платформе. С его помощью можно подобрать нужный нод под задачу, разобраться в данных и логике сценария, настроить запросы и выражения, написать код и найти ошибки. Но запросы, которые работают с доступами и ролями, всё равно нужно внимательно проверять перед запуском.
-
Проверяйте готовые community nodes. У n8n большое сообщество, и многие интеграции уже реализованы в виде пользовательских нодов. Перед тем как писать сложную логику самостоятельно, стоит посмотреть, нет ли готового решения. При этом важно проверить автора пакета, активность проекта и то, какие данные и разрешения он использует. Для простых и важных интеграций стандартный нод HTTP Request часто остаётся самым понятным и контролируемым вариантом.
Итог
Мы связали почту, систему обучения и Keycloak без разработки отдельного приложения. Теперь сотрудник получает доступ сразу после прохождения курса, а следом ему автоматически приходит письмо со ссылкой и инструкцией.









Нет комментариев