OAuth production checklist n8n: проверка перед запуском ¶
Обновлено: 2026-05-29
Короткий ответ ¶
OAuth в n8n ломается в production чаще всего из-за несовпадения redirect URI, неверного публичного URL, лишних или недостающих scopes, личного владельца приложения и отсутствия плана reauth. Перед запуском проверьте OAuth Callback/Redirect URL из n8n, настройки reverse proxy, consent screen, права приложения, владельца credential, refresh token и smoke tests для read/write-действий.
Чем OAuth опасен в production ¶
API key обычно можно заменить быстро. OAuth credential зависит от приложения у провайдера, redirect URI, scopes, consent screen, токенов, владельца аккаунта и политики безопасности сервиса. Ошибка может проявиться не сразу: workflow работает месяц, а потом token отзывается, пользователь теряет доступ, провайдер меняет правила, или новый домен ломает callback.
Production-чеклист нужен до того, как workflow станет частью продаж, поддержки, отчётов или платежной цепочки.
1. Проверить callback/redirect URL ¶
В большинстве OAuth-интеграций нужно взять OAuth Redirect URL или Callback URL из n8n credential и добавить его в приложение у провайдера. Не набирайте URL вручную, если его можно скопировать из n8n.
Проверьте:
- домен совпадает с production-доменом n8n;
- используется
https, а не локальныйhttp://localhost:5678; - путь callback не изменён reverse proxy;
- нет лишнего slash, другого subdomain или старого домена;
- staging и production используют разные OAuth apps или явно разделённые redirect URI;
- после изменения
WEBHOOK_URL/base URL credential заново проверен.
Типичный симптом: провайдер пишет redirect_uri_mismatch, invalid_redirect_uri, unauthorized_client, а в n8n пользователь видит, что credential не может подключиться.
2. Разделить dev, staging и production ¶
Один OAuth app на все окружения кажется удобным, пока кто-то не меняет scopes или redirect URI ради теста. Для production лучше иметь отдельное приложение или хотя бы отдельные redirect URI, owners и credentials.
| Окружение | Что допустимо | Что опасно |
|---|---|---|
| Dev | личные тестовые аккаунты, короткие эксперименты | доступ к production CRM |
| Staging | тестовые данные, почти production scopes | реальные клиенты и платежи |
| Production | service owner, минимальные scopes, change control | общий app с песочницей |
Если провайдер ограничивает количество apps, хотя бы документируйте, какие redirect URI и scopes относятся к какому контуру.
3. Scopes и consent screen ¶
Не ставьте максимальные scopes «чтобы точно заработало». Чем шире права, тем выше риск при утечке или ошибке workflow. Начинайте с минимальных действий: read, create, update. Delete, admin, billing, export и full mailbox доступ должны требовать отдельного обоснования.
Матрица проверки:
| Workflow делает | Scope должен позволять | Scope не должен давать без причины |
|---|---|---|
| читает строки | чтение конкретного сервиса | управление всеми файлами |
| создаёт лид | запись лидов | удаление сделок и пользователей |
| отправляет черновик email | compose/draft | чтение всего ящика |
| читает календарь | read calendar | изменение событий всех пользователей |
| получает отчёт | read analytics | admin консоль |
После изменения scopes часто нужен re-consent. Запланируйте окно и владельца, который может пройти авторизацию.
4. Владелец OAuth app и credential ¶
Production OAuth не должен зависеть от личного аккаунта одного сотрудника. Даже если сервис требует пользовательскую авторизацию, owner приложения и документированный recovery должны быть командными.
Проверьте:
- кто может зайти в консоль провайдера;
- кто может создать новый client secret;
- кто может добавить redirect URI;
- кто может пройти reauth;
- что произойдёт при увольнении владельца;
- есть ли второй администратор;
- где записана дата истечения client secret, если она есть.
5. Reverse proxy и публичный URL ¶
Self-hosted n8n часто стоит за Nginx, Caddy, Cloudflare, Traefik или load balancer. OAuth callback должен возвращаться на публичный URL, а не на внутренний hostname контейнера. Если n8n генерирует callback со старым доменом или localhost, проверьте base URL/proxy-настройки и deployment variables.
Быстрая проверка:
- Открыть credential в n8n.
- Скопировать OAuth Callback/Redirect URL.
- Сравнить с настройкой у провайдера символ в символ.
- Проверить, что URL доступен по HTTPS извне.
- Пройти reauth в отдельном окне браузера.
- Запустить read-only node с этим credential.
6. Token refresh и reauth ¶
OAuth credential может сломаться даже без изменения workflow. Причины: revoked consent, expired refresh token, смена пароля, политика организации, удалённый app, изменённые scopes, security review у провайдера.
Что добавить в production-процесс:
- дата последней успешной авторизации;
- owner для reauth;
- smoke test после reauth;
- мониторинг 401/403;
- понятное сообщение в alert: какой credential и какой workflow;
- runbook для замены client secret;
- список зависимых workflow.
7. Smoke tests перед запуском ¶
Проверка «credential saved successfully» недостаточна. Нужно выполнить действия, которые workflow реально делает.
| Тест | Что доказывает |
|---|---|
| Read test | token, scopes и network работают |
| Write test на тестовом объекте | запись разрешена и mapping корректен |
| Reauth test | owner может повторить подключение |
| Token refresh wait | credential живёт после обновления token |
| Error branch | 401/403 попадает в alert, а не теряется |
| Scope reduction | workflow не требует лишних прав |
Для критичных workflow добавьте тест после перезапуска контейнера n8n: иногда проблема скрывается в env или домене, а не в самом OAuth.
8. Частые ошибки и решения ¶
| Ошибка | Вероятная причина | Что сделать |
|---|---|---|
redirect_uri_mismatch |
callback в app отличается от n8n URL | скопировать URL из n8n и обновить app |
invalid_client |
неправильный client ID/secret | пересоздать secret и проверить окружение |
access_denied |
пользователь не дал consent или app не разрешён | проверить consent screen и политику org |
| 401 после месяца работы | token отозван или истёк | reauth, проверить owner и scopes |
| 403 на write node | scope только read-only | добавить нужный scope и пройти consent |
| callback ведёт на localhost | неверный public/base URL | настроить публичный HTTPS URL и proxy |
Контрольный чеклист ¶
- OAuth Callback/Redirect URL скопирован из n8n и совпадает у провайдера.
- Production использует HTTPS-домен, а не localhost или staging URL.
- Scopes минимальны и соответствуют действиям workflow.
- У OAuth app есть командный owner и второй администратор.
- Известно, кто делает reauth и где инструкция.
- Read/write smoke tests прошли на безопасных данных.
- 401/403 попадают в error workflow или alert.
- Список зависимых workflow сохранён перед изменением app.
FAQ ¶
Почему OAuth работал локально, но сломался на сервере?
Почти всегда из-за redirect URI или публичного URL. Локальный callback отличается от production callback, а провайдер требует точного совпадения.
Можно ли использовать один OAuth app для dev и production?
Технически часто можно, но лучше разделять. Иначе тестовые изменения scopes или redirect URI могут сломать production.
Нужно ли делать reauth после изменения scopes?
Часто да. Зависит от провайдера, но в production планируйте re-consent и smoke test.
Что делать, если credential принадлежит сотруднику?
Запланировать перенос на сервисный или командный аккаунт. До переноса назначить второго администратора и документировать recovery.
Как мониторить OAuth-проблемы?
Отслеживайте 401/403, invalid_grant, access_denied, падения конкретных nodes и рост failed executions для workflow, зависящих от OAuth.
Как применять playbook в команде ¶
Playbook «/playbooks/oauth-production-checklist/» должен быть понятен человеку, который не писал workflow. Поэтому в нём нужны входной сигнал, частота запуска, критерий тревоги, ответственный и ожидаемое действие после срабатывания.
Используйте этот материал как операционную инструкцию: что проверить, где посмотреть логи, как понять масштаб проблемы и когда эскалировать.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | payload webhook/API с подписью, timestamp, event_id и исходным HTTP-статусом | позволяет повторить проблему без доступа к production-секретам |
| Контроль | successful_executions, skipped_items, retry_count, error_branch_usage, manual_override_count | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | случайно расширить права credentials, сохранить секреты в логах или отдать действие без approval | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «/playbooks/oauth-production-checklist/» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
{
"event_id": "evt_...",
"event_type": "object.updated",
"received_at": "2026-05-29T10:00:00Z",
"signature_valid": true,
"dedupe_key": "provider:event_id",
"payload_version": "v1"
}
Критерий готовности ¶
- есть понятный вход, выход и владелец процесса
- проверены пустой input, повтор события и ошибка внешнего сервиса
- результат логируется без секретов и персональных данных
- страница связана с соседними рецептами, ошибками или playbook по теме