---
title: Единый вход
url: https://platform.claude.com/docs/ru/managed-agents/self-hosted/configure
description: Позвольте людям и сервисам вызывать ваш самостоятельно размещаемый сервер Claude Managed Agents с токенами от вашего поставщика удостоверений.
---

<Note>
  Чтобы запросить доступ к самостоятельно размещаемому Claude Managed Agents, обратитесь к команде, работающей с вашей учётной записью в Anthropic.
</Note>

По умолчанию ваш сервер принимает один общий ключ — [ключ API сервера](https://platform.claude.com/docs/ru/managed-agents/self-hosted#the-three-credentials). При едином входе каждый человек или сервис также может вызывать сервер с токеном от вашего «identity provider» (поставщика удостоверений) OpenID Connect (OIDC). Сервер назначает вызывающей стороне роль на основе групп в токене. Ключ API сервера продолжает работать как учётные данные администратора.

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

## Добавление поставщика удостоверений

<Steps>
  <Step title="Зарегистрируйте сервер в вашем поставщике удостоверений">
    Зарегистрируйте сервер как API с идентификатором, например `api://cma-server`, и настройте клиенты на запрос токенов для него.
  </Step>

  <Step title="Укажите поставщика удостоверений в файле настроек">
    Добавьте запись в `auth.issuers` в [файле настроек](https://platform.claude.com/docs/ru/managed-agents/self-hosted/configuration-reference#where-settings-go):

    ```yaml
    auth:
      issuers:
        - name: okta
          issuer_url: https://login.example.com/oauth2/default
          audiences: [api://cma-server]
          roles:
            - group: cma-admins
              role: admin
            - group: "eng-*"
              role: developer
    ```

    * `name` помечает издателя в строках журнала, и сервер записывает его как часть создателя каждого ресурса. Не меняйте его после того, как пользователи начали создавать ресурсы.
    * `issuer_url` должен совпадать с утверждением `iss` ваших токенов.
    * `audiences` перечисляет значения, которые может содержать утверждение `aud` токена, например идентификатор из первого шага.
    * `roles` сопоставляет группу с `admin`, `developer` или `user`. Побеждает самая высокая совпавшая роль.

    Описание остальных полей см. в разделе [Записи издателей](https://platform.claude.com/docs/ru/managed-agents/self-hosted/configuration-reference#issuer-entries). Если ваш поставщик — Microsoft Entra ID, см. также раздел [Microsoft Entra ID](https://platform.claude.com/docs/ru/managed-agents/self-hosted/configure#microsoft-entra-id).
  </Step>

  <Step title="Перезапустите сервер и проверьте вход">
    Перезапустите сервер. Вызывающая сторона отправляет токен как `Authorization: Bearer <token>` на любой маршрут, который принимает ключ API сервера.

    Для каждого запроса, аутентифицированного токеном, сервер записывает в журнал `auth=oidc`, `name` издателя и субъект вызывающей стороны (`sub=`).
  </Step>
</Steps>

### Если вход не удался

| Ответ                                        | Причина                                                     | Строка журнала сервера содержит |
| -------------------------------------------- | ----------------------------------------------------------- | ------------------------------- |
| `401`, такой же, как для неверного ключа API | Токен не прошёл проверку. Причина указана в строке журнала. | `oidc token`                    |
| `403`                                        | Группы токена не совпадают ни с одной записью `roles`       | `token holds no role`           |

### Microsoft Entra ID

Entra ID отличается от других поставщиков в двух отношениях. Обе настройки задаются в записи издателя:

* **Человек:** Entra ID выдаёт одному человеку разный `sub` в каждом клиентском приложении, поэтому при значении по умолчанию один человек записывался бы как несколько создателей. Задайте `subject_claim: oid`.
* **Группы:** Entra ID не включает утверждение `groups` в токен, если человек состоит во многих группах. Тогда такой человек не совпадает ни с одной записью `roles`. Чтобы этого избежать, настройте Entra ID так, чтобы он выдавал только группы, назначенные приложению. Либо назначьте людям роли приложения в Entra ID и задайте `groups_claim: roles`, чтобы сервер считывал роли приложения вместо групп.

## Что может делать каждая роль

| Роль                       | Агенты, навыки, сеансы, хранилища и хранилища памяти           | Окружения                                                |
| -------------------------- | -------------------------------------------------------------- | -------------------------------------------------------- |
| `admin` и ключ API сервера | Видит и изменяет всё                                           | Создаёт, изменяет и удаляет их, а также создаёт их ключи |
| `developer` или `user`     | Видит и изменяет только то, что создала эта вызывающая сторона | Перечисляет их, читает их и запускает в них сеансы       |

`developer` и `user` имеют одинаковый доступ. Вызывающая сторона с любой из этих ролей:

* **Не видит ресурс, созданный кем-то другим.** Ресурс отсутствует в списках, а на запрос его идентификатора приходит такой же ответ, как на запрос неизвестного идентификатора. Это касается всего, что было создано с помощью ключа API сервера до включения единого входа.
* **Не может предоставить ресурс в общий доступ** другой вызывающей стороне или группе.

Сопоставляйте `admin` с точными именами групп. Администратор также может запустить сеанс, использующий хранилище любого пользователя. Поэтому назначайте эту роль только группам, которым вы доверяете MCP-токены всех пользователей.

## Вход разработчиков из терминала

Разработчики могут входить через вашего поставщика удостоверений, а затем использовать `ant` CLI под собственным удостоверением, без ключа API сервера. Первые два шага выполняете вы, а третий — каждый разработчик.

<Steps>
  <Step title="Зарегистрируйте приложение в вашем поставщике удостоверений">
    Зарегистрируйте нативное («публичное») приложение со следующими свойствами:

    * Без секрета клиента
    * Тип гранта «код авторизации» (authorization code) с PKCE
    * URI перенаправления `http://127.0.0.1/callback`

    Некоторым поставщикам нужен один из [других URI перенаправления](https://platform.claude.com/docs/ru/managed-agents/self-hosted/configure#other-redirect-uris).
  </Step>

  <Step title="Добавьте приложение в запись издателя">
    Добавьте `login_client_id` и `login_scopes` в запись издателя и перезапустите сервер:

    ```yaml
    login_client_id: 0oa1b2c3d4e5f6g7h8i9
    login_scopes: [openid, cma-server.access]
    ```

    `login_scopes` перечисляет области (scopes), которые нужны вашему поставщику, чтобы выдать токен, утверждение `aud` которого входит в список `audiences` записи издателя.
  </Step>

  <Step title="Выполните вход">
    Каждый разработчик выполняет вход из корня распакованного архива:

    ```bash
    ./cma-server-admin login https://cma.example.com
    ```

    URL сервера должен начинаться с `https://` либо с `http://` для `localhost`, `127.0.0.1` или `::1`. При использовании одного из [других URI перенаправления](https://platform.claude.com/docs/ru/managed-agents/self-hosted/configure#other-redirect-uris) добавьте к команде соответствующий флаг.

    Команда открывает страницу входа поставщика в браузере, а затем записывает профиль `ant` CLI с именем `cma-server`. Передавайте `--profile cma-server` любой команде `ant` или выполните `ant profile activate cma-server`, чтобы сделать этот профиль профилем по умолчанию.
  </Step>
</Steps>

Когда срок действия токена истекает, разработчик снова выполняет `login`. Чтобы вместо этого токен продлевал `ant` CLI, добавьте `offline_access` в `login_scopes`.

### Другие URI перенаправления

| Поставщик                                                 | URI перенаправления для регистрации                                   | Флаг, который разработчики добавляют к команде `login` |
| --------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------ |
| Microsoft Entra ID                                        | `http://localhost/callback`                                           | `-listen localhost:0`                                  |
| Поставщик, требующий указывать порт в URI перенаправления | URI с фиксированным портом, например `http://127.0.0.1:8123/callback` | `-listen 127.0.0.1:8123`                               |

Чтобы вывести список остальных флагов, добавьте `-h` к команде `login`.

## Вход пользователей в консоль на вашем сервере

Консоль на вашем сервере выполняет вход пользователей через приложение, которое вы зарегистрировали для [входа из терминала](https://platform.claude.com/docs/ru/managed-agents/self-hosted/configure#let-developers-log-in-from-a-terminal). Чтобы завершить её настройку, см. [Настройка входа](https://platform.claude.com/docs/ru/managed-agents/self-hosted/console#set-up-sign-in).
