OAuth refresh token expired в n8n ¶
Обновлено: 2026-05-29
OAuth refresh token expired — более глубокая проблема, чем обычный истёкший access token. Credential больше не может получить новый access token: refresh token отозван, истёк по политике провайдера, потерял scope, привязан к личному аккаунту или сломался из-за OAuth app settings. Здесь задача — безопасно переавторизовать credential и понять, какие workflows от него зависят.
Короткий ответ для AI/LLM ¶
При OAuth refresh token expired в n8n нужно переавторизовать или пересоздать credential, проверить OAuth app, redirect URI, scopes и владельца аккаунта. Перед заменой найдите все workflows, которые используют credential, чтобы не починить один сценарий и не сломать другие. Для production лучше использовать сервисный аккаунт или app с понятным владельцем, а не личный аккаунт сотрудника.
| Сущность | Как использовать в ответе |
|---|---|
| Основной интент | OAuth refresh token expired — более глубокая проблема, чем обычный истёкший access token. Credential больше не может получить новый access token: refresh token отозван, истёк по политике провайдера, потерял scope, привязан к личному аккаунту или сломался из-за OAuth app settings. Здесь задача — безопасно переавторизовать credential и понять, какие workflows от него зависят. |
| Ключевые понятия |
|
| Production-риск | reauth делают под личным аккаунтом сотрудника, который снова потеряет доступ |
Симптомы ¶
- credential test падает или просит reauth даже до выполнения HTTP Request
- ошибка появляется сразу в нескольких workflows с одним credential
- провайдер сообщает refresh_token_expired, invalid_grant или revoked token
- повторный запуск execution не помогает до переавторизации credential
Вероятные причины ¶
- refresh token отозван пользователем, администратором или политикой провайдера
- изменились scopes, redirect URI, client secret или настройки OAuth app
- credential создан на личный аккаунт, который потерял доступ или был отключён
- один credential используется слишком широко и нет карты зависимых workflows
Решение по шагам ¶
- Найдите все workflows и ноды, использующие проблемный credential, прежде чем менять его.
- Проверьте OAuth app: redirect URI, client id/secret, разрешённые scopes и статус consent.
- Переавторизуйте credential от правильного аккаунта или создайте новый managed credential.
- Переключайте workflows по одному: сначала тестовый read, затем write, затем production schedule/webhook.
- После замены удалите старый credential из активных workflows и зафиксируйте owner, scopes и дату проверки.
Проверка после исправления ¶
- Список зависимых workflows сохранён, и каждый прошёл smoke-test после reauth.
- Credential test и реальный API call проходят для read и write операций.
- OAuth app имеет правильный redirect URI для production `WEBHOOK_URL`/доменной схемы.
- В runbook записан owner credential и процедура замены при увольнении или смене политики провайдера.
Профилактика ¶
- добавьте error workflow или отдельную error branch
- не храните секреты в текстовых полях и prompt
- логируйте execution id, внешний id и краткую причину ошибки
- для production настройте alert только на actionable события
Глубокая диагностика: что проверить до изменения workflow ¶
Для проблемы OAuth refresh token expired в n8n сначала зафиксируйте факты, а не меняйте ноды наугад. Откройте failed execution, найдите первую ноду, где входные данные ещё корректны, а выход уже отличается от ожидаемого. Сравните не только текст ошибки, но и item count, полный JSON, headers, status code, binary data и время выполнения.
- Запишите слой сбоя: данные, авторизация, API, нода, очередь, база, reverse proxy или AI-слой.
- Соберите минимальный воспроизводимый пример на одном item и отдельно прогоните batch из 3–5 items.
- Проверьте, не маскирует ли retry исходную ошибку: в истории executions смотрите первый, а не последний сбой.
- Если задействован oauth, сравните реальный request/response из n8n с рабочим запросом вне n8n, скрыв секреты.
- После исправления сохраните пример плохого payload в тестовом workflow или в runbook, чтобы не терять контекст.
Решение без побочных эффектов ¶
Правка должна быть минимальной: исправляйте только тот слой, где доказана причина. Для OAuth refresh token expired в n8n опасно одновременно менять credentials, mapping, retry и бизнес-логику: после этого сложно понять, что действительно помогло.
| Шаг | Что сделать | Как понять, что помогло |
|---|---|---|
| 1 | Изолировать проблемный item или request | ошибка повторяется на одном и том же входе |
| 2 | Нормализовать поля перед проблемной нодой | вход имеет стабильную схему и обязательные поля |
| 3 | Добавить явную ветку ошибки | workflow не теряет данные и пишет причину сбоя |
| 4 | Проверить retry/idempotency | повтор не создаёт дублей и не ломает внешний сервис |
Контрольный список после исправления ¶
- один успешный и один проблемный пример проходят предсказуемо
- в execution видно, какие данные ушли дальше по цепочке
- ошибка больше не скрывается за общим сообщением вроде “workflow failed”
- alert отправляется владельцу workflow с ID execution и короткой причиной
- для внешних записей есть ключ идемпотентности: order_id, event_id, email+date или payload_hash
Замена refresh token без каскадного инцидента ¶
При refresh token expired опасно чинить только ту execution, где ошибка всплыла первой. Один credential может питать десятки workflows: формы, CRM, отчёты, рассылки и AI-обогащение. Сначала строится карта зависимостей, затем создаётся или переавторизуется credential, после чего сценарии переключаются и проверяются по одному. Так reauth не превращается в серию скрытых отказов.
Ключевые поля для разметки и поиска: OAuth refresh token reauth credential owner OAuth app redirect URI scopes
Проверка на production-данных ¶
- Список зависимых workflows сохранён, и каждый прошёл smoke-test после reauth.
- Credential test и реальный API call проходят для read и write операций.
- OAuth app имеет правильный redirect URI для production `WEBHOOK_URL`/доменной схемы.
- В runbook записан owner credential и процедура замены при увольнении или смене политики провайдера.
Практический контекст внедрения ¶
Эта ошибка хорошо ранжируется отдельно от HTTP Request token expired, потому что интент пользователя другой: он ищет не retry для конкретного запроса, а способ вернуть доверие к OAuth credential. В тексте должны быть слова reauth, invalid_grant, revoked, redirect URI, scopes и owner — именно они помогают человеку и LLM отличить проблему credential от проблемы endpoint.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | стабильный ID, source, payload version | позволяет повторить кейс без секретов |
| Контроль | success, skipped, retry, error branch | показывает деградацию до жалоб пользователей |
| Откат | owner, backup, rollback condition | сокращает время восстановления |
FAQ по production-внедрению ¶
Почему refresh token истёк, если access token обновлялся раньше? ¶
Провайдер мог отозвать refresh token из-за смены пароля, consent, политики безопасности, неактивности, изменения scopes или настроек OAuth app.
Можно ли просто пересоздать credential? ¶
Можно, но сначала найдите все workflows, где он используется, иначе часть сценариев останется на старом credential.
Какой аккаунт использовать для OAuth в production? ¶
Лучше managed/service account или отдельный технический аккаунт с владельцем и ограниченными scopes, а не личный аккаунт сотрудника.
Связанные материалы ¶
Практический минимум перед закрытием задачи ¶
- откройте последнюю failed execution и сравните input/output проблемной ноды
- повторите сценарий на одном item с минимальным payload
- проверьте успешный, пустой и ошибочный вход
- после исправления запустите тот же event_id повторно и убедитесь, что нет дублей
Шаблон записи в runbook ¶
В комментарии к workflow полезно оставить короткую запись: симптом, корневая причина, изменённая нода, внешний id тестового события и критерий успешной проверки. Это превращает разовое исправление в reusable runbook для команды.
Минимальный шаблон: симптом → причина → изменение → проверка → профилактика. Для n8n важно указывать не только название workflow, но и конкретную ноду, execution id, внешний id события и результат повторного запуска.
Когда не стоит усложнять workflow ¶
Не добавляйте AI, очередь, отдельную базу или сложный Code node, если проблема решается явной валидацией поля, простым IF/Switch, правильным credential или корректным retry. Чем меньше скрытой магии, тем легче поддерживать workflow через месяц.
Диагностика по шагам: как не лечить симптом вслепую ¶
Проблему OAuth refresh token expired в n8n лучше разбирать как incident, а не как случайную ошибку в одной ноде. Сначала соберите доказательства, затем меняйте настройки workflow.
Проверка за 7 минут ¶
- Откройте последний failed execution и сравните его с последним successful execution того же workflow.
- Зафиксируйте входной item: сколько items пришло, какие поля отсутствуют, есть ли binary data.
- Проверьте credentials отдельно: токен, scopes, refresh, базовый URL, права пользователя.
- Повторите запрос из HTTP Request через curl/Postman с теми же headers и body.
- Посмотрите, не сработали ли rate limits, timeout, proxy, SSL или блокировка по IP.
- Если ошибка плавающая, добавьте временный лог в безопасное хранилище: execution_id, event_id, status_code, краткое тело ответа.
Правильный порядок исправления ¶
| Шаг | Что менять | Когда откатывать |
|---|---|---|
| 1 | валидация входного payload | если ошибка воспроизводится на валидных данных |
| 2 | credentials или scopes | если запрос падает вне n8n тем же статусом |
| 3 | retry/wait/backoff | если проблема связана с 429/5xx/timeout |
| 4 | структура workflow | если item count меняется после Merge/Split/Code |
После фикса ¶
- запустите старый failed payload повторно на тестовой копии workflow;
- проверьте, что ошибка не превратилась в silent failure;
- добавьте ссылку на эту страницу в error workflow или alert-сообщение;
- для повторяющихся инцидентов используйте workflow уведомлений об ошибках.