Claude Platform Docs
АдминистрированиеАутентификация

Справочник по WIF

Переменные окружения, правила валидации, конфигурация профилей и справочник по ошибкам для Workload Identity Federation.

На этой странице собраны поверхности конфигурации, ограничения валидации и сопоставления ошибок для Workload Identity Federation (федерации удостоверений рабочих нагрузок), или WIF. Пошаговые инструкции по настройке см. в руководствах по провайдерам.

Запрос обмена токена

POST /v1/oauth/token принимает тело JSON, использующее грант jwt-bearer из RFC 7523. SDK формируют этот запрос за вас на основе переменных окружения; примеры cURL в каждом руководстве по провайдеру показывают необработанное тело запроса.

ПолеОбязательноОписание
grant_typeДаВсегда urn:ietf:params:oauth:grant-type:jwt-bearer.
assertionДаOIDC JWT, выпущенный вашим провайдером удостоверений.
federation_rule_idДаТегированный идентификатор (fdrl_...) правила федерации, которое нужно оценить.
organization_idДаUUID вашей организации Anthropic.
service_account_idДаТегированный идентификатор (svac_...) целевого сервисного аккаунта.
workspace_idУсловноТегированный идентификатор (wrkspc_...) рабочего пространства, которым ограничивается выпускаемый токен, или литерал default для рабочего пространства организации по умолчанию. Обязателен, если правило включено более чем для одного рабочего пространства. Если опущен, сервер выбирает единственное включённое рабочее пространство правила.

Ответ обмена токена

POST /v1/oauth/token возвращает стандартный ответ с токеном OAuth 2.0 (RFC 6749 §5.1):

ПолеТипОписание
access_tokenstringКраткосрочный токен Anthropic с префиксом sk-ant-oat01-.... Передавайте его как Authorization: Bearer <token>.
token_typestringВсегда Bearer.
expires_inintegerКоличество секунд до истечения срока действия токена.
scopestringОбласть OAuth, предоставленная сработавшим правилом.

Переменные окружения

SDK читает эти переменные, чтобы выполнить федеративный обмен токена без аргументов конструктора.

ПеременнаяОбязательноОписаниеПример
ANTHROPIC_FEDERATION_RULE_IDДаТегированный идентификатор правила федерации, которое нужно оценить.fdrl_...
ANTHROPIC_ORGANIZATION_IDДаUUID вашей организации Anthropic. Найдите его в Claude Console в разделе Settings > Organization.00000000-0000-0000-0000-000000000000
ANTHROPIC_IDENTITY_TOKEN_FILEОдна из _TOKEN_FILE или _TOKENПуть в файловой системе к JWT, выпущенному вашим «identity provider» (провайдером удостоверений), или IdP. SDK перечитывает этот файл при каждом обмене, чтобы проецируемые токены, ротируемые на диске, всегда были актуальными./var/run/secrets/anthropic.com/token
ANTHROPIC_IDENTITY_TOKENОдна из _TOKEN_FILE или _TOKENСам JWT в виде строки. Используйте, когда ваша платформа внедряет токен как переменную окружения, а не как файл.eyJhbGciOiJSUzI1NiIs...
ANTHROPIC_SERVICE_ACCOUNT_IDДаТегированный идентификатор целевого сервисного аккаунта Anthropic, от имени которого действует выпущенный токен доступа.svac_...
ANTHROPIC_WORKSPACE_IDУсловноТегированный идентификатор рабочего пространства, которым ограничивается выпускаемый токен, или литерал default. Обязателен, если правило федерации включено более чем для одного рабочего пространства; необязателен, если правило привязано к одному рабочему пространству. Выпускаемый токен ограничивается этим рабочим пространством в момент обмена, поэтому для смены рабочего пространства требуется новый обмен.wrkspc_...
ANTHROPIC_PROFILEНетИмя профиля конфигурации для загрузки. Имеет приоритет над переменными окружения федерации из этой таблицы.staging-profile

Прямой путь федерации через переменные окружения активируется только тогда, когда заданы все переменные ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_SERVICE_ACCOUNT_ID и одна из ANTHROPIC_IDENTITY_TOKEN_FILE или ANTHROPIC_IDENTITY_TOKEN. ANTHROPIC_WORKSPACE_ID читается вместе с ними, но не влияет на активацию.

Приоритет учётных данных

SDK разрешает учётные данные в следующем порядке. Побеждает первый источник, который даёт учётные данные.

ПорядокИсточникПримечания
1Аргумент конструктора (api_key=, auth_token=, credentials=)Всегда переопределяет всё остальное.
2ANTHROPIC_API_KEY или ANTHROPIC_AUTH_TOKENПолностью затеняет федерацию. Удалите их при миграции с ключей API.
3ANTHROPIC_PROFILEЗагружает <config_dir>/configs/<name>.json. Отсутствующий именованный профиль — это ошибка, а не переход к следующему источнику.
4Переменные окружения федерацииANTHROPIC_FEDERATION_RULE_ID + ANTHROPIC_ORGANIZATION_ID + ANTHROPIC_SERVICE_ACCOUNT_ID + ANTHROPIC_IDENTITY_TOKEN[_FILE].
5Активный профильРазрешается из <config_dir>/active_config с откатом к профилю с именем default.

Когда профиль загружен, переменные окружения заполняют любые поля, которые профиль опускает, но никогда не переопределяют поля, которые профиль задаёт явно. Например, ANTHROPIC_WORKSPACE_ID заполняет workspace_id только тогда, когда активный профиль его не задаёт.

Файл конфигурации профиля

Профиль — это именованный файл конфигурации, который читают и SDK, и CLI ant. Профили позволяют поставлять параметры федерации вместе с образом контейнера или переключаться между окружениями без изменения кода.

Каталог конфигурации

SDK находит каталог конфигурации в следующем порядке:

  1. $ANTHROPIC_CONFIG_DIR
  2. ~/.config/anthropic в Linux и macOS
  3. %APPDATA%\Anthropic в Windows

Активный профиль

Имя активного профиля разрешается в следующем порядке:

  1. $ANTHROPIC_PROFILE
  2. Содержимое <config_dir>/active_config (однострочный файл, записываемый командой ant profile activate <name>)
  3. Литеральное имя default

Claude Code и Claude Agent SDK соблюдают тот же порядок разрешения, поэтому профиль федерации, настроенный здесь, также аутентифицирует эти инструменты без дополнительной настройки.

Структура файлов

ПутьСодержимоеЧувствительность
<config_dir>/configs/<profile>.jsonversion, блок authentication, organization_id, workspace_id и base_url.Не секретно. Безопасно коммитить или встраивать в образ.
<config_dir>/credentials/<profile>.jsonversion, кэшированный access_token, expires_at и (для интерактивного входа) refresh_token.Секретно. Записывается SDK с режимом 0600.

И файл конфигурации, и файл учётных данных содержат строковое поле верхнего уровня version в формате major.minor (в настоящее время "1.0"). SDK записывает это поле автоматически, чтобы будущие выпуски могли обнаруживать и мигрировать старые форматы; опустите его при написании конфигурации вручную, и SDK будет считать файл соответствующим текущей версии.

Пример профиля федерации

configs/production.json
{
  "version": "1.0",
  "authentication": {
    "type": "oidc_federation",
    "federation_rule_id": "fdrl_...",
    "service_account_id": "svac_...",
    "identity_token": {
      "source": "file",
      "path": "/var/run/secrets/anthropic.com/token"
    }
  },
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "workspace_id": "wrkspc_...",
  "base_url": "https://api.anthropic.com"
}

Если authentication.identity_token опущен, SDK использует ANTHROPIC_IDENTITY_TOKEN_FILE или ANTHROPIC_IDENTITY_TOKEN из окружения.

Области OAuth

oauth_scope, который вы задаёте в правиле федерации, определяет, какие конечные точки Claude API может вызывать выпущенный токен доступа.

ОбластьПредоставляет доступ к
workspace:developerВсе неадминистративные конечные точки Claude API в рабочем пространстве правила: Messages (включая потоковую передачу и подсчёт токенов), Models, Managed Agents и их сессии, Files и Skills. Это соответствует доступу, который имеет ключ API рабочего пространства в том же рабочем пространстве.
workspace:inferenceКонечные точки инференса в рабочем пространстве правила: Messages (включая потоковую передачу и подсчёт токенов), Models и OpenAI-совместимая конечная точка чата. Используйте её для рабочих нагрузок, которым нужно только вызывать Claude и никогда не требуется управлять Files, Skills или другими ресурсами.
workspace:manage_tunnelsAPI туннелей MCP: создание, перечисление и получение туннелей, регистрация и архивирование сертификатов CA, раскрытие и ротация токена туннеля, а также архивирование туннелей. Модальное окно создания туннеля в Console фиксирует эту область, когда вы создаёте правило из него.
org:adminПолный доступ к Admin API (участники организации, приглашения, рабочие пространства, ключи API и остальное). Токен OAuth org:admin может создавать или изменять только правила с областью workspace:developer или workspace:inference и не может обновлять издателя, на котором основано правило с любой другой областью; см. ограничения.

Запрос к конечной точке вне области токена возвращает HTTP 403. Более детальные области (по ресурсу или чтение против записи) в настоящее время недоступны.

Границы разрешений

oauth_scope правила федерации — это потолок: выпущенный токен никогда не может его превысить. organization_role целевого сервисного аккаунта (developer или admin) определяет, какие области могут быть предоставлены, поэтому правило, предоставляющее org:admin, должно быть нацелено на сервисный аккаунт с organization_role=admin. Эффективные разрешения — это пересечение области правила и роли сервисного аккаунта.

oauth_scope правилаorganization_role сервисного аккаунтаЭффективные разрешения
workspace:developeradminДоступ к Claude API только в рабочем пространстве правила. Область ограничивает токен ниже роли.
org:adminadminПолный доступ к Admin API (участники организации, приглашения, рабочие пространства, ключи API и остальное), за вычетом исключений для вызывающих через OAuth; см. ограничения.

Правила валидации

Anthropic применяет эти ограничения, когда вы создаёте или обновляете издателей и правила, а также при проверке входящего JWT в момент обмена.

Полные сведения о параметрах и схемы ответов см. в справочнике API сервисных аккаунтов, справочнике API издателей федерации и справочнике API правил федерации.

Поля ресурсов

ПолеОграничение
name издателя, правила и сервисного аккаунтаДолжно соответствовать ^[a-z0-9-]+$, длина от 1 до 255 символов.
workspace_idОбязательно при создании, если applies_to_all_workspaces не равно true. Рабочее пространство (wrkspc_...), чьи квота, биллинг и ограничения скорости применяются к токенам, выпущенным по этому правилу. Должно быть рабочим пространством в той же организации, а целевой сервисный аккаунт должен быть участником этого рабочего пространства.
applies_to_all_workspacesЛогическое значение. Установите true, чтобы включить правило в каждом рабочем пространстве организации вместо указания одного; при создании требуется либо это поле, либо workspace_id.
token_lifetime_secondsЦелое число от 60 до 86400 (от 1 минуты до 24 часов). По умолчанию 3600. Значения вне этого диапазона отклоняются в момент запроса. См. Время жизни токена и обновление.

Поля URL

Поля issuer_url, jwks.discovery_base и jwks.url проходят валидацию:

ОграничениеПодробности
СхемаДолжна быть https.
ПортДолжен быть 443 (явный или по умолчанию).
ХостДолжен быть публичным DNS-именем хоста вашего провайдера OIDC. Должен разрешаться в публичные IP-адреса; IP-литералы не принимаются.

Ошибки валидации URL возвращают 400 invalid_request_error с именем поля в качестве префикса сообщения об ошибке (например, issuer_url: url must use https scheme).

Проверка JWT

ОграничениеПодробности
Максимальный размерJWT assertion должен быть не более 16 КиБ.
Алгоритм подписиПринимаются только асимметричные алгоритмы (семейства RSA и ECDSA: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384, PS512). HMAC (HS256, HS384, HS512) и none отклоняются.
Идентификатор ключаЗаголовок JWT должен содержать kid, соответствующий ключу в JWKS издателя. Токены без kid отклоняются.
Обязательные утвержденияsub должен присутствовать. iat должен присутствовать и не быть в будущем. exp должен присутствовать и быть в будущем.
Однократное использованиеAssertion, содержащий утверждение jti, может быть обменян только один раз для каждого издателя: повторный обмен с тем же jti отклоняется как повторное воспроизведение. Поле check_jti издателя (включено по умолчанию) управляет этой проверкой; assertion без утверждения jti ей не подвергаются. См. справочник API издателей федерации.
Максимальное время жизниВремя жизни токена (exp минус iat) не должно превышать настроенный максимум издателя (1 час по умолчанию, настраивается для каждого издателя в Claude Console).
Расхождение часовК exp, nbf и iat применяется допуск в 30 секунд.

Семантика сопоставления правил

Блок match правила федерации определяет, принимается ли входящий JWT. Все заполненные поля оцениваются с семантикой AND: JWT должен удовлетворять каждому заполненному сопоставителю. Должно быть задано хотя бы одно из subject_prefix, claims или condition; блок match, содержащий только audience (или вообще не содержащий сопоставителей), отклоняется. Это защищает от правил, которые принимали бы любой токен от издателя.

СопоставительТипСемантика
subject_prefixstringТочное совпадение с утверждением sub JWT. Завершающий * превращает его в совпадение по префиксу (значение sub должно начинаться с символов перед *). Чувствителен к регистру.
audiencestringУтверждение aud JWT должно содержать именно эту строку. Когда aud — массив, проверку удовлетворяет любой точно совпадающий элемент.
claimsmap<string, string>Каждый ключ — это имя утверждения верхнего уровня, а каждое значение — требуемое точное строковое значение. Для вложенных, числовых, логических или сложных утверждений, таких как списки и карты, используйте вместо этого condition с выражением CEL.
conditionstring (CEL)Выражение CEL, которое должно вычисляться в true.

Среда вычисления CEL

Выражение condition имеет доступ к единственной переменной:

ПеременнаяТипСодержимое
claimsmapПолный декодированный набор утверждений JWT. Вложенные объекты доступны как вложенные карты.

Пример:

claims.sub.startsWith("repo:acme-corp/") && claims.ref in ["refs/heads/main", "refs/heads/release"]

Ошибки

Ошибки обмена токена

POST /v1/oauth/token возвращает ошибки в стандартной форме ошибок API. SDK оборачивает сбои обмена в типизированную FederationExchangeError (или эквивалент для языка), которая предоставляет HTTP-статус, тело ответа и request_id.

СтатусОшибкаПричинаРешение
400invalid_request_errorfederation_rule_id имеет неверный формат или отсутствует обязательное поле запроса.Проверьте идентификатор fdrl_ и то, что тело запроса включает все обязательные поля.
400invalid_request_errorworkspace_id присутствует, но не является корректным идентификатором wrkspc_... или литералом default.Исправьте значение workspace_id; сообщение ответа указывает ожидаемый формат.
401authentication_errorУтверждение iss JWT не совпадает в точности с зарегистрированным issuer_url.Сравните побайтово, включая завершающие слэши и схему: jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson | .iss' <<< "$JWT".
401authentication_errorНе удалось получить JWKS, JWKS устарел или JWT подписан ключом, отсутствующим в JWKS.Для режима inline обновите издателя ротированными ключами. Для discovery и explicit_url убедитесь, что конечная точка JWKS доступна на порту 443; если издатель недавно ротировал свой ключ подписи, см. Ротация ключей и кэширование.
401authentication_errorУтверждение exp JWT находится в прошлом (за пределами 30-секундного окна расхождения).Убедитесь, что ваш провайдер удостоверений проецирует свежий токен, а SDK перечитывает файл токена.
401authentication_errorJWT был проверен, но его утверждения не удовлетворяют блоку match правила.Декодируйте JWT и сравните каждое утверждение с правилом. subject_prefix чувствителен к регистру. audience требует точного совпадения элемента.
401authentication_errorfederation_rule_id не существует, архивирован, или JWT не авторизован для него (объединено для предотвращения перебора).Проверьте идентификатор правила в Claude Console и то, что правило не было архивировано.
401authentication_errorПравило федерации включено более чем для одного рабочего пространства, а в запросе опущен workspace_id. Запись в истории аутентификации показывает причину workspace_id_required.Установите ANTHROPIC_WORKSPACE_ID (или поле тела workspace_id в необработанном запросе) в идентификатор wrkspc_..., которым вы хотите ограничить токен. См. Запрос обмена токена.

Каждый отказ по assertion возвращает одну и ту же непрозрачную ошибку 401 authentication_error с фиксированным сообщением Authentication failed, независимо от того, какая проверка не прошла; различимая ошибка позволила бы вызывающему зондировать конфигурацию правила. Причина отказа записывается в записи о попытке в истории аутентификации, например match_subject_prefix, когда утверждение sub не проходит subject_prefix правила, или workspace_id_required, когда правило охватывает несколько рабочих пространств, а запрос не указывает ни одного. Запросы, отклонённые до подтверждения организации правила (семейство 400 invalid_request_error выше), не оставляют записи в истории; их сообщения ответа прямо называют проблему. 401 без соответствующей записи в истории обычно означает, что сам federation_rule_id не был распознан.

Распространённые сбои на стороне SDK

СимптомПричинаРешение
SDK сообщает «no credentials» вместо выполнения обменаОдна из ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_SERVICE_ACCOUNT_ID или ANTHROPIC_IDENTITY_TOKEN[_FILE] не задана, и ни один профиль не активен.Задайте все четыре переменные или настройте профиль.
SDK аутентифицируется с ключом API вместо федерацииANTHROPIC_API_KEY или ANTHROPIC_AUTH_TOKEN задана и побеждает по приоритету.Удалите переменную ключа или токена.
FileNotFoundError при первом запросеПуть в ANTHROPIC_IDENTITY_TOKEN_FILE не существует. SDK открывает файл лениво в момент обмена.Убедитесь, что том с проецируемым токеном смонтирован и путь совпадает.
Обмен токена успешен, но запрос к Claude API возвращает 403Область выпущенного токена не предоставляет доступ к этой конечной точке.Сверьте oauth_scope правила с разделом Области OAuth.
Аутентификация не проходит с пустыми учётными даннымиПеременная окружения учётных данных экспортирована, но установлена в пустую строку. Пустые значения всё равно побеждают в своём слоте приоритета.Удалите переменную с помощью unset VAR, а не VAR="".

Устранение неполадок при неудачном обмене

Ответ 401 authentication_error намеренно непрозрачен, и его сообщение всегда Authentication failed; причина отказа записывается в истории аутентификации, а не в ответе.

Один из распространённых непрозрачных сбоев — повторно воспроизведённый assertion: assertion, содержащий утверждение jti, может быть обменян только один раз, поэтому рабочая нагрузка, повторно отправляющая тот же JWT (цикл повторных попыток или обновление, перечитывающее неротированный токен), отклоняется при втором обмене. Страница истории аутентификации показывает эти попытки с причиной jti_reused; решение — выпускать свежий assertion для каждого обмена.

Если вам всё же нужно отлаживать по самому JWT, пройдите эти проверки по порядку:

  1. Декодируйте JWT

    Декодируйте отправленный вами assertion, чтобы сравнить каждое утверждение с конфигурацией вашего издателя и правила:

    cURL
    jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson' <<< "$JWT"
  2. Проверьте, что iss совпадает с издателем

    Декодированное утверждение iss должно побайтово совпадать с зарегистрированным issuer_url, включая схему, порт и любой завершающий слэш. Несовпадение в одном символе приводит к сбою проверки.

  3. Проверьте, что aud совпадает с правилом

    Декодированное утверждение aud должно содержать значение audience правила как точное совпадение. Когда aud — массив, один элемент должен совпадать точно.

  4. Проверьте sub и каждую запись claims

    Сравните sub с subject_prefix правила (чувствителен к регистру; завершающий * означает совпадение по префиксу, всё остальное — точное совпадение). Сравните каждый ключ в карте claims правила с одноимённым утверждением верхнего уровня.

  5. Проверьте exp, nbf и iat

    exp должен быть в будущем, а nbf/iat должны быть в прошлом, в пределах 30-секундного окна расхождения. Если часы хоста рабочей нагрузки ушли, в остальном действительный токен отклоняется.

  6. Проверьте доступность JWKS

    Для режима discovery запросите <jwks.discovery_base or issuer_url>/.well-known/openid-configuration по публичному HTTPS на порту 443 и убедитесь, что jwks_uri разрешается. Для explicit_url запросите URL JWKS напрямую. Для inline убедитесь, что ключ подписи издателя не ротировался с момента регистрации ключей.

    Если издатель ротировал свой ключ подписи и сразу начал им подписывать, обмены могут завершаться сбоем в течение до одной минуты, пока обновляется кэш JWKS Anthropic. См. Ротация ключей и кэширование.

Режимы источника JWKS

Когда вы регистрируете издателя федерации, поле jwks управляет тем, как Anthropic получает открытые ключи, используемые для проверки подписей JWT от этого издателя. Это размеченное объединение с дискриминатором type:

jwks.typeФорма jwksПоведениеКогда использовать
discovery (по умолчанию){ "type": "discovery", "discovery_base": "https://..." } (discovery_base необязателен; задайте его, когда URL обнаружения отличается от issuer_url)Anthropic запрашивает <discovery_base or issuer_url>/.well-known/openid-configuration, читает jwks_uri из документа обнаружения и запрашивает JWKS оттуда.Ваш IdP отдаёт стандартный документ обнаружения OIDC в публичном интернете. Большинство управляемых провайдеров (EKS, GKE, Cloud Run, GitHub Actions, Entra ID) это поддерживают.
explicit_url{ "type": "explicit_url", "url": "https://..." }Anthropic запрашивает JWKS напрямую из url. issuer_url используется только для строкового сравнения с утверждением iss JWT и никогда не запрашивается.Ваш IdP не отдаёт документ обнаружения, или обнаружение доступно только внутри сети, но JWKS публично доступен.
inline{ "type": "inline", "keys": [...] }Вы предоставляете массив объектов JWK напрямую (массив keys из документа JWKS, а не объект-обёртку). Anthropic не делает исходящих запросов. issuer_url используется только для сравнения iss.Изолированные среды, самостоятельно управляемые кластеры Kubernetes с внутрикластерными URL издателя или когда вам нужен явный контроль над ротацией ключей.

Размеченное объединение делает сопутствующие поля взаимоисключающими по построению. И discovery, и explicit_url также принимают необязательную строку ca_cert_pem для издателей, которые обслуживают TLS от частного CA.

Ротация ключей и кэширование

В режимах discovery и explicit_url Anthropic кэширует полученный JWKS. Если ваш провайдер удостоверений публикует новый ключ подписи и сразу начинает подписывать им токены, обмены, предъявляющие эти токены, могут завершаться ошибкой подписи в течение до 1 минуты, пока обновляется кэш.

Чтобы избежать этого окна, публикуйте новый ключ подписи в JWKS как минимум за 15 минут до того, как ваш провайдер удостоверений начнёт подписывать им токены, и сохраняйте заменённый ключ в JWKS до тех пор, пока не истекут подписанные им токены. Управляемые провайдеры удостоверений обычно соблюдают эту дисциплину самостоятельно. Если вы эксплуатируете собственного издателя (самостоятельно управляемый кластер Kubernetes, провайдер обнаружения OIDC SPIRE или пользовательский сервер авторизации Okta с настроенной периодичностью ротации), убедитесь, что ваша политика ротации публикует новые ключи до их первого использования.

Was this page helpful?