• Сообщения
  • Управляемые агенты
  • Администрирование
Search...
⌘K
Организация
Admin APIРабочие пространства
Аутентификация
ОбзорФедерация удостоверений рабочих нагрузокСправочник по WIF
AWSGoogle CloudMicrosoft AzureGitHub ActionsKubernetesSPIFFEOkta
Мониторинг
API использования и затратAPI ограничений скоростиAPI аналитики Claude Code
Данные и соответствие требованиям
Резидентность данныхAPI и хранение данных
Compliance API
ОбзорПолучение доступаЛента активностиЧаты, файлы и проектыОрганизации, пользователи, роли и группыПроектирование интеграцииОшибкиЧасто задаваемые вопросы
Log in
Okta
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Администрирование/Поставщики удостоверений

Использование WIF с Okta

Федерация идентификаторов сервисных приложений Okta с Claude API с помощью Workload Identity Federation.

Okta может выступать в роли провайдера идентификации рабочих нагрузок, выдавая OIDC-токены доступа сервисному приложению через грант OAuth 2.0 client_credentials. Ваша рабочая нагрузка аутентифицируется в Okta (как правило, с помощью private_key_jwt, поэтому общий секрет не хранится), получает подписанный «JSON Web Token» (веб-токен JSON), или JWT, и обменивает этот JWT у Anthropic на краткосрочный токен доступа.

URL издателя сервера авторизации Okta имеет вид https://<your-domain>.okta.com/oauth2/<auth-server-id>. Если вы используете встроенный сервер по умолчанию, путь будет /oauth2/default.

Вы должны использовать пользовательский сервер авторизации Okta (включая сервер default). Токены, выданные непосредственно сервером авторизации организации Okta (конечная точка /oauth2/v1/token без идентификатора сервера авторизации в пути), не могут быть проверены внешними сторонами, поскольку Okta не публикует для них ключи подписи.

Существует множество способов настройки и аутентификации в Okta, которые выходят за рамки данной документации. Убедитесь, что ваша конфигурация и механизмы аутентификации соответствуют руководствам и практикам безопасности вашей компании.

Предварительные требования

  • Знакомство с концепциями WIF: сервисные аккаунты, издатели федерации и правила федерации.
  • Организация Okta с включённым API Access Management (требуется для пользовательских серверов авторизации).
  • Разрешение на создание сервисных аккаунтов, издателей федерации и правил федерации в Claude Console для вашей организации Anthropic.
  • Рабочая нагрузка, которая может запросить токен у конечной точки Okta /v1/token и обратиться к api.anthropic.com.

Настройка Okta

На верхнем уровне вам необходимо:

  1. Создать сервисное приложение Okta.
  2. Настроить ваш сервер авторизации по умолчанию (или создать новый пользовательский сервер авторизации) с аудиторией, областью действия, политикой доступа и любыми пользовательскими утверждениями, по которым вы хотите выполнять сопоставление.

Точная навигация зависит от конфигурации вашей организации Okta и версии консоли администратора. Пронумерованные шаги ниже описывают один из распространённых путей:

  1. Создайте интеграцию сервисного приложения. В Okta Admin Console создайте новую интеграцию приложения типа API Services (OIDC, machine-to-machine). Запишите сгенерированный Client ID.
  2. Настройте аутентификацию клиента. Для настройки без ключей выберите Public key / Private key (private_key_jwt) и зарегистрируйте публичный JWK вашей рабочей нагрузки. В качестве альтернативы используйте секрет клиента, если ваша среда может безопасно его хранить. Для следующего примера вам может потребоваться отключить требование DPoP для приложения; убедитесь, что ваша производственная конфигурация соответствует требованиям безопасности вашей организации.
  3. Задайте аудиторию. На вашем пользовательском сервере авторизации установите аудиторию в значение https://api.anthropic.com, чтобы выдаваемые токены доступа содержали это утверждение aud. Anthropic проверяет aud на соответствие этому фиксированному значению.
  4. Предоставьте область действия. На вашем пользовательском сервере авторизации убедитесь, что существует хотя бы одна область действия, которую сервисному приложению разрешено запрашивать (например, anthropic.access). Okta отклоняет запросы client_credentials, которые не включают предоставленную область действия.
  5. Создайте политику доступа. На вашем пользовательском сервере авторизации создайте политику доступа с хотя бы одним правилом, которое позволяет вашему сервисному приложению запрашивать область действия, предоставленную на шаге 4.
  6. (Необязательно) Добавьте пользовательские утверждения. Если вы хотите выполнять сопоставление по чему-то отличному от идентификатора клиента, добавьте утверждение в токен доступа на вкладке Claims вашего сервера авторизации.

Для сервисного приложения, использующего client_credentials, Okta устанавливает утверждение sub выданного токена доступа равным Client ID приложения, а iss — URL издателя сервера авторизации.

Настройка Anthropic

Следуйте пошаговому руководству по настройке, чтобы зарегистрировать издателя федерации, создать сервисный аккаунт Anthropic и создать правило федерации в Claude Console. Используйте следующие значения, специфичные для Okta.

Издатель федерации: Используйте URL вашего пользовательского сервера авторизации Okta и режим обнаружения. Anthropic считывает документ обнаружения Okta .well-known/openid-configuration и получает JWKS из указанного в нём jwks_uri.

{
  "name": "okta-prod",
  "issuer_url": "https://acme.okta.com/oauth2/aus1a2b3c4d5e6f7g8h9",
  "jwks_source": "discovery"
}

Правило федерации: Выполняйте сопоставление по утверждению Okta sub, которое является Client ID сервисного приложения. Если вы определили пользовательские утверждения в Okta, вы можете вместо этого выполнять сопоставление по ним с помощью карты claims или CEL-выражения condition.

{
  "name": "okta-pipeline",
  "issuer_id": "fdis_...",
  "match": {
    "subject_prefix": "0oa1b2c3d4e5f6g7h8i9",
    "audience": "https://api.anthropic.com"
  },
  "target": { "type": "service_account", "service_account_id": "svac_..." },
  "workspace_id": "wrkspc_...",
  "oauth_scope": "workspace:developer",
  "token_lifetime_seconds": 600
}

Получение токена и вызов Claude API

В отличие от платформенно-нативных провайдеров (AWS, Google Cloud, Kubernetes), которые делают токен доступным внутри среды выполнения рабочей нагрузки (через проецируемый файл или локальную конечную точку метаданных), Okta этого не делает. Ваша рабочая нагрузка должна вызвать конечную точку токенов Okta, чтобы получить JWT, а затем передать этот JWT в Anthropic SDK в качестве токена идентификации.

import os
import httpx
import anthropic
from anthropic import WorkloadIdentityCredentials


def fetch_okta_token() -> str:
    response = httpx.post(
        f"{os.environ['OKTA_ISSUER']}/v1/token",
        data={
            "grant_type": "client_credentials",
            "scope": "anthropic.access",
            "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
            # Сформируйте JWT client_assertion по RFC 7523, подписанный закрытым ключом вашего приложения Okta
            "client_assertion": build_signed_client_assertion(),
        },
    )
    response.raise_for_status()
    return response.json()["access_token"]


client = anthropic.Anthropic(
    credentials=WorkloadIdentityCredentials(
        identity_token_provider=fetch_okta_token,
        federation_rule_id=os.environ["ANTHROPIC_FEDERATION_RULE_ID"],
        organization_id=os.environ["ANTHROPIC_ORGANIZATION_ID"],
        service_account_id=os.environ["ANTHROPIC_SERVICE_ACCOUNT_ID"],
        workspace_id=os.environ.get("ANTHROPIC_WORKSPACE_ID"),
    ),
)

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(message.content[0].text)

Каждая вкладка SDK демонстрирует шаблон с вызываемым объектом: Anthropic SDK снова вызывает ваш провайдер токена идентификации всякий раз, когда токен доступа Anthropic приближается к истечению срока действия, поэтому ваша функция получения токена Okta должна возвращать свежий токен при каждом вызове, а не кэшировать один токен бессрочно. CLI ant перечитывает ANTHROPIC_IDENTITY_TOKEN_FILE при каждом обмене, поэтому обновляйте этот файл по таймеру для долго работающих оболочек.

Проверка настройки

Успешный обмен возвращает access_token, начинающийся с sk-ant-oat01-, и значение expires_in в секундах. При ошибке 400 invalid_grant см. раздел Устранение неполадок при неудачном обмене; наиболее частая причина со стороны Okta — несоответствие issuer_url (он должен включать путь /oauth2/<auth-server-id>; сервер авторизации организации Okta использовать нельзя).

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

Несколько сервисных приложений под одним сервером авторизации Okta используют одного и того же издателя. Правило, в котором опущен subject_prefix, соответствует каждому сервисному приложению на этом сервере, поэтому любая команда, которая может зарегистрировать такое приложение, сможет получить федеративный токен Anthropic.

Ограничьте блок match правила до наиболее узкой области, подходящей для вашего сценария использования:

  • Закрепите точный Client ID: Установите subject_prefix равным полному Client ID сервисного приложения без завершающего *.
  • Закрепите аудиторию: Выполняйте сопоставление по значению audience, которое вы настроили на сервере авторизации, чтобы токены, выпущенные для другой аудитории, отклонялись.
  • Сопоставление по пользовательским утверждениям: Для более детального ограничения области добавьте утверждения на вкладке Claims сервера авторизации и сопоставляйте их с помощью карты claims правила или CEL-выражения condition.
  • Используйте одно правило на каждое сервисное приложение: Создавайте отдельное правило федерации для каждого сервисного приложения, а не используйте одно правило для нескольких приложений.

Дальнейшие шаги

  • Ознакомьтесь со справочником по WIF для получения полного порядка разрешения учётных данных и конфигурации профилей.
  • См. справочник по WIF для сопоставления по пользовательским утверждениям Okta с помощью CEL-выражений.

Was this page helpful?

  • Предварительные требования
  • Настройка Okta
  • Настройка Anthropic
  • Получение токена и вызов Claude API
  • Проверка настройки
  • Ограничение области действия правила
  • Дальнейшие шаги