claude-code
Claude Code хранит MCP-токены на Linux в открытом виде
Claude News
claude-codeClaude Code версии 2.1.257 на Linux хранит OAuth-токены доступа к удалённым MCP-серверам в открытом виде: файл ~/.claude/.credentials.json имеет режим 0600, но содержит объект mcpOAuth с полями accessToken, clientId и serverUrl по каждому подключённому серверу. Проверку после входа на несколько удалённых MCP-серверов описал Secretspec, разработчик одноимённого менеджера секретов.
Коротко
- Токен появляется незаметно: пользователь запускает claude mcp login, подтверждает доступ в браузере и получает подключённый сервер, но Claude Code всё равно обязан сохранить полученный секрет на диск, чтобы подключение пережило перезапуск.
- Поведение совпадает с документацией Anthropic по управлению учётными данными: на macOS используется зашифрованный Keychain с откатом на тот же файл, на Windows файл наследует права каталога профиля.
- SecretSpec предлагает заменяемый уровень хранения: в версии 0.20 доступны 33 интеграции, от системных keyring и менеджеров паролей до облачных секрет-менеджеров, а OAuth-поток при этом не меняется.
Плоский файл с токенами выглядит как узкое место: любой процесс, запущенный от имени пользователя, читает его без дополнительных барьеров, а формулировка «хранятся безопасно» в документации описывает права доступа к файлу, а не шифрование. Для команд, которые подключают Claude Code к рабочим MCP-серверам, это смещает границу доверия с провайдера на локальную машину, и вероятно, именно здесь настройка хранилища оказалась бы полезнее всего.
На macOS токены уходят в Keychain, на Linux остаются в файле с режимом 0600
Документация Claude Code по MCP утверждает, что токены аутентификации «хранятся безопасно». В документации Anthropic по управлению учётными данными это описано по платформам: на macOS применяется зашифрованный Keychain с откатом на ~/.claude/.credentials.json при его недоступности, на Linux используется тот же файл с режимом 0600, на Windows файл лежит в %USERPROFILE%\.claude\.credentials.json и наследует права каталога профиля.
Проверка проводилась на Claude Code 2.1.257 после входа на несколько удалённых MCP-серверов. Права файла были выставлены в 0600, как и предполагается, но на верхнем уровне JSON обнаружился объект mcpOAuth: в приведённой записи для сервера cloudflare-observability рядом с accessToken лежат clientId, discoveryState, redirectUri, serverName и serverUrl. Значения учётных данных в публикации скрыты.
OAuth стандартизирует делегирование и обновление токена, но не локальное хранилище
Secretspec перечисляет, что даёт OAuth в Claude Code: обнаружение сервера авторизации, запрос конкретных scope, обмен кода на токен, обновление токена доступа и отзыв гранта. Документация Anthropic по MCP также разрешает пользователю зафиксировать набор scope, которые Claude Code запрашивает у сервера.
Секретный характер результата от этого не меняется: полученный bearer-токен можно воспроизвести, если он украден. В сравнении, которое приводит Secretspec, обычный API-токен с ограниченной областью тоже должен храниться клиентом, тоже может иметь срок жизни и отзываться независимо, а различия сводятся к стандартному интерактивному делегированию и автоматическому обновлению.
Secretspec формулирует это так: OAuth отвечает за то, как Claude Code получает и обновляет делегированный доступ, а хранение секрета между обращениями остаётся отдельной задачей, которую протокол не описывает. По этой причине в разборе предлагается вынести уровень персистентности в заменяемый интерфейс хранилища учётных данных.
SecretSpec 0.20 насчитывает 33 интеграции провайдеров
Точкой интеграции Secretspec называет свой Node.js/TypeScript SDK: он встраивает Rust-резолвер, поэтому на стороне TypeScript не нужен отдельный код под каждый бэкенд. Claude Code мог бы сериализовать одну OAuth-запись на сервер и просить SecretSpec загрузить, сохранить или удалить её через выбранного пользователем или организацией провайдера.
В версии 0.20 у SecretSpec 33 интеграции: локальные keyring-хранилища, менеджеры паролей, зашифрованные файлы, облачные секрет-менеджеры и цели развёртывания. Провайдеры объявляют свои возможности, поэтому хранилище учётных данных может требовать доступа на чтение и запись, оставаясь в рамках одного интерфейса. Системный keyring назначается командой secretspec config global init --provider keyring --profile default.
Похожий выбор уже реализован в Codex: его справочник по конфигурации описывает бэкенды auto, file и keyring, а параметр mcp_oauth_credentials_store со значением keyring переключает хранение на системный менеджер ключей. Общим интерфейсом провайдеров секретов это не является, но плоский файл перестаёт быть единственным вариантом на Linux.
Изменить хранение может только Anthropic
Публичный репозиторий Claude Code не включает основную реализацию CLI, а лицензия закрыта: внести предложенную интеграцию со стороны нельзя, поменять хранение MCP-токенов может только Anthropic. В SecretSpec тем временем готовят версию 0.21 с версионированным резолвером и IPC для провайдеров, чтобы приложения обращались к хранилищам по локальному протоколу без встраивания SDK, дата выпуска не названа.
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
Из Google мы используем только имя и аватар. Почту не сохраняем.
