Fundamentals

OAuth

OpenClaw поддерживает «аутентификацию по подписке» через OAuth для провайдеров, которые ее предлагают (в частности, OpenAI Codex (ChatGPT OAuth)). Для Anthropic практическое разделение теперь такое:

  • API-ключ Anthropic: обычная оплата Anthropic API
  • Anthropic Claude CLI / аутентификация по подписке внутри OpenClaw: сотрудники Anthropic сообщили нам, что такое использование снова разрешено

OpenAI Codex OAuth явно поддерживается для использования во внешних инструментах, таких как OpenClaw.

OpenClaw хранит и аутентификацию по API-ключу OpenAI, и ChatGPT/Codex OAuth под каноническим идентификатором провайдера openai. Более старые идентификаторы профилей openai-codex:* и записи auth.order.openai-codex являются устаревшим состоянием, которое исправляет openclaw doctor --fix; используйте идентификаторы профилей openai:* и auth.order.openai для новой конфигурации.

Для Anthropic в production более безопасный рекомендуемый путь — аутентификация по API-ключу.

На этой странице объясняется:

  • как работает обмен токенов OAuth (PKCE)
  • где хранятся токены (и почему)
  • как работать с несколькими аккаунтами (профили + переопределения для отдельных сессий)

OpenClaw также поддерживает Plugin провайдеров, которые поставляют собственные потоки OAuth или API-ключей. Запускайте их так:

bash
openclaw models auth login --provider <id>

Приемник токенов (зачем он нужен)

Провайдеры OAuth часто выпускают новый refresh-токен во время потоков входа или обновления. Некоторые провайдеры (или OAuth-клиенты) могут инвалидировать старые refresh-токены, когда новый выпускается для того же пользователя/приложения.

Практический симптом:

  • вы входите через OpenClaw и через Claude Code / Codex CLI → один из них позже случайно оказывается «разлогинен»

Чтобы уменьшить это, OpenClaw рассматривает auth-profiles.json как приемник токенов:

  • среда выполнения читает учетные данные из одного места
  • мы можем хранить несколько профилей и маршрутизировать их детерминированно
  • повторное использование внешнего CLI зависит от провайдера: Codex CLI может bootstrap пустой профиль openai:default, но после появления у OpenClaw локального OAuth-профиля локальный refresh-токен становится каноническим. Если этот локальный refresh-токен отклонен, OpenClaw может использовать пригодный токен Codex CLI того же аккаунта как runtime-only fallback; другие интеграции могут оставаться управляемыми извне и перечитывать свое хранилище аутентификации CLI
  • пути статуса и запуска, которые уже знают настроенный набор провайдеров, ограничивают область обнаружения внешнего CLI этим набором, поэтому хранилище входа нерелевантного CLI не проверяется для настройки с одним провайдером

Хранилище (где находятся токены)

Секреты хранятся в хранилищах аутентификации агентов:

  • Профили аутентификации (OAuth + API-ключи + необязательные ссылки уровня значений): ~/.openclaw/agents/<agentId>/agent/auth-profiles.json
  • Устаревший файл совместимости: ~/.openclaw/agents/<agentId>/agent/auth.json (статические записи api_key очищаются при обнаружении)

Устаревший файл только для импорта (по-прежнему поддерживается, но не является основным хранилищем):

  • ~/.openclaw/credentials/oauth.json (импортируется в auth-profiles.json при первом использовании)

Все перечисленное также учитывает $OPENCLAW_STATE_DIR (переопределение каталога состояния). Полная справка: /gateway/configuration

О статических ссылках на секреты и поведении активации runtime-снимка см. Управление секретами.

Когда у вторичного агента нет локального профиля аутентификации, OpenClaw использует сквозное наследование из хранилища агента по умолчанию/главного агента. Он не клонирует auth-profiles.json главного агента при чтении. Refresh-токены OAuth особенно чувствительны: обычные потоки копирования по умолчанию пропускают их, потому что некоторые провайдеры ротируют или инвалидируют refresh-токены после использования. Настройте отдельный вход OAuth для агента, когда ему нужен независимый аккаунт.

Совместимость с устаревшими токенами Anthropic

OpenClaw также предоставляет setup-token Anthropic как поддерживаемый путь аутентификации по токену, но теперь предпочитает повторное использование Claude CLI и claude -p, когда они доступны.

Миграция Anthropic Claude CLI

OpenClaw снова поддерживает повторное использование Anthropic Claude CLI. Если на хосте у вас уже есть локальный вход Claude, onboarding/configure может использовать его напрямую.

Обмен OAuth (как работает вход)

Интерактивные потоки входа OpenClaw реализованы в openclaw/plugin-sdk/llm и подключены к мастерам/командам.

Setup-token Anthropic

Форма потока:

  1. запустите setup-token Anthropic или paste-token из OpenClaw
  2. OpenClaw сохраняет полученные учетные данные Anthropic в профиле аутентификации
  3. выбор модели остается на anthropic/...
  4. существующие профили аутентификации Anthropic остаются доступными для отката/управления порядком

OpenAI Codex (ChatGPT OAuth)

OpenAI Codex OAuth явно поддерживается для использования вне Codex CLI, включая рабочие процессы OpenClaw.

Команда входа по-прежнему использует канонический идентификатор провайдера OpenAI:

bash
openclaw models auth login --provider openai

Используйте --profile-id openai:<name> для нескольких аккаунтов ChatGPT/Codex OAuth в одном агенте. Не используйте openai-codex:<name> для новых профилей. Doctor переносит этот старый префикс в не конфликтующий идентификатор профиля openai:*; запустите openclaw models auth list --provider openai после исправления, прежде чем копировать идентификаторы профилей в auth.order или /model ...@<profileId>.

Форма потока (PKCE):

  1. сгенерировать PKCE verifier/challenge + случайный state
  2. открыть https://auth.openai.com/oauth/authorize?...
  3. попытаться перехватить callback на http://127.0.0.1:1455/auth/callback
  4. если callback не может привязаться (или вы работаете удаленно/без GUI), вставить URL/код перенаправления
  5. выполнить обмен на https://auth.openai.com/oauth/token
  6. извлечь accountId из access-токена и сохранить { access, refresh, expires, accountId }

Путь мастера: openclaw onboard → выбор аутентификации openai.

Обновление + истечение срока действия

Профили хранят метку времени expires.

Во время выполнения:

  • если expires в будущем → использовать сохраненный access-токен
  • если срок истек → обновить (под файловой блокировкой) и перезаписать сохраненные учетные данные
  • если вторичный агент читает унаследованный OAuth-профиль главного агента, обновление записывается обратно в хранилище главного агента вместо копирования refresh-токена в хранилище вторичного агента
  • исключение: некоторые учетные данные внешнего CLI остаются управляемыми извне; OpenClaw перечитывает эти хранилища аутентификации CLI вместо расходования скопированных refresh-токенов. Bootstrap Codex CLI намеренно уже: он создает пустой профиль openai:default, затем обновления, принадлежащие OpenClaw, сохраняют локальный профиль каноническим. Если локальное обновление Codex завершается с ошибкой, а у Codex CLI есть пригодный токен для того же аккаунта, OpenClaw может использовать этот токен для текущего runtime-запроса, не записывая его обратно в auth-profiles.json.

Поток обновления автоматический; обычно вам не нужно управлять токенами вручную.

Несколько аккаунтов (профили) + маршрутизация

Два шаблона:

1) Предпочтительно: отдельные агенты

Если вы хотите, чтобы «личное» и «рабочее» никогда не взаимодействовали, используйте изолированных агентов (отдельные сессии + учетные данные + рабочее пространство):

bash
openclaw agents add workopenclaw agents add personal

Затем настройте аутентификацию для каждого агента (мастер) и маршрутизируйте чаты нужному агенту.

2) Расширенный вариант: несколько профилей в одном агенте

auth-profiles.json поддерживает несколько идентификаторов профилей для одного провайдера.

Выберите, какой профиль используется:

  • глобально через порядок в конфигурации (auth.order)
  • для отдельной сессии через /model ...@<profileId>

Пример (переопределение сессии):

  • /model Opus@anthropic:work

Как посмотреть существующие идентификаторы профилей:

  • openclaw channels list --json (показывает auth[])

Связанные документы:

Связанное

Was this useful?
On this page

On this page