Перейти к содержанию

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 от него зависят.
Ключевые понятия
  • OAuth refresh token
  • reauth
  • credential owner
  • OAuth app
  • redirect URI
  • scopes
  • service account
  • dependent 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

Решение по шагам

  1. Найдите все workflows и ноды, использующие проблемный credential, прежде чем менять его.
  2. Проверьте OAuth app: redirect URI, client id/secret, разрешённые scopes и статус consent.
  3. Переавторизуйте credential от правильного аккаунта или создайте новый managed credential.
  4. Переключайте workflows по одному: сначала тестовый read, затем write, затем production schedule/webhook.
  5. После замены удалите старый 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 минут

  1. Откройте последний failed execution и сравните его с последним successful execution того же workflow.
  2. Зафиксируйте входной item: сколько items пришло, какие поля отсутствуют, есть ли binary data.
  3. Проверьте credentials отдельно: токен, scopes, refresh, базовый URL, права пользователя.
  4. Повторите запрос из HTTP Request через curl/Postman с теми же headers и body.
  5. Посмотрите, не сработали ли rate limits, timeout, proxy, SSL или блокировка по IP.
  6. Если ошибка плавающая, добавьте временный лог в безопасное хранилище: execution_id, event_id, status_code, краткое тело ответа.

Правильный порядок исправления

ШагЧто менятьКогда откатывать
1валидация входного payloadесли ошибка воспроизводится на валидных данных
2credentials или scopesесли запрос падает вне n8n тем же статусом
3retry/wait/backoffесли проблема связана с 429/5xx/timeout
4структура workflowесли item count меняется после Merge/Split/Code

После фикса

  • запустите старый failed payload повторно на тестовой копии workflow;
  • проверьте, что ошибка не превратилась в silent failure;
  • добавьте ссылку на эту страницу в error workflow или alert-сообщение;
  • для повторяющихся инцидентов используйте workflow уведомлений об ошибках.