Как автоматизировать выдачу доступа после обучения с помощью 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 без разработки отдельного приложения. Теперь сотрудник получает доступ сразу после прохождения курса, а следом ему автоматически приходит письмо со ссылкой и инструкцией.