
Per-user OAuth для MCP-серверов: Keycloak, n8n и Telegram-бот через один Auth Proxy
fuckseer 11 минут назад Per-user OAuth для MCP-серверов: Keycloak, n8n и Telegram-бот через один Auth Proxy Уровень сложности Средний Время на прочтение 8 мин Охват и читатели 331 Python * IT-инфраструктура *...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. fuckseer 11 минут назад Per-user OAuth для MCP-серверов: Keycloak, n8n и Telegram-бот через один Auth Proxy Уровень сложности Средний Время на прочтение 8 мин Охват и читатели 331 Python * IT-инфраструктура * Искусственный интеллект Информационная безопасность * DevOps * Кейс Из песочницы У нас есть корпоративные MCP-серверы, AI-агент и пользователи в Telegram. Каждый пользователь должен авторизоваться через Keycloak, а агент — работать от его имени. Здесь собраны грабли, на которые мы наступили, и архитектурные решения, к которым пришли.
Кому это будет полезно Если вы: Прикручиваете OAuth/OIDC к чему-то, что на это не рассчитано Строите мультитенантного AI-агента, где у каждого пользователя свои права Пытаетесь подружить MCP-серверы с корпоративным IdP Пишете кастомные ноды для n8n Исходная архитектура MCP (Model Context Protocol) — открытый стандарт от Anthropic для подключения AI-моделей к внешним инструментам. У нас несколько MCP-серверов, перед ними — глобальный прокси на FastMCP, который агрегирует все в единую точку входа. Схема исходной архитектуры Глобальный прокси работал, но не знал, кто делает запрос.
Технические детали
Любой, кто достучится до порта, получает доступ ко всему. Для внутренней разработки это терпимо, но для бота с сотнями пользователей — уже нет. Выбор архитектуры: почему отдельный сервис Первый порыв — засунуть проверку токена прямо в прокси.
Быстро поняли, что не хотим мешать маршрутизацию с авторизацией в одном процессе. Gateway обновляется при каждом изменении конфигурации MCP-серверов, а авторизация — штука, которую лучше менять как можно реже. Второй вариант — встроить авторизацию в каждый MCP-сервер.
Но их у нас достаточно, и каждый пришлось бы учить ходить в Keycloak. А если завтра мы сменим IdP — переделывать все. Остановились на отдельном Auth Proxy перед Gateway.
Отраслевые последствия
Да, это еще один сервис в деплое и лишние 3-5 миллисекунд на каждый запрос. Но когда основное время уходит на LLM (2-4 секунды), эти миллисекунды роли не играют. Зато Gateway остается чистым агрегатором, а вся логика авторизации живет в одном месте.
Схема архитектуры с per-user OAuth В FastMCP для этого есть OAuthProxy — он представляется MCP-клиентам как полноценный OAuth-сервер с поддержкой Dynamic Client Registration, а за кулисами использует заранее зарегистрированные credentials с Keycloak. Пароль пользователя при этом вводится только в браузере на странице Keycloak — Auth Proxy его никогда не видит. Грабли OAuth Из десятка проблем, с которыми столкнулись, 2 отняли больше всего времени.
Кто на самом деле генерирует ошибку При подключении через n8n получали invalid_scope: Client was not registered with scope openid . Полезли проверять настройки клиента в Keycloak — scope openid там был. Стали грешить на конфигурацию realm.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





