# Аутентификация {#authentication}
Чтобы взаимодействовать с сервером, CLI должен аутентифицировать запросы с
помощью [bearer
authentication](https://swagger.io/docs/specification/authentication/bearer-authentication/).
CLI поддерживает аутентификацию как пользователя, как учетной записи или с
помощью маркера OIDC.
## Как пользователь {#as-a-user}
При использовании CLI локально на вашем компьютере мы рекомендуем
аутентифицироваться как пользователь. Чтобы пройти аутентификацию в качестве
пользователя, необходимо выполнить следующую команду:
```bash
tuist auth login
```
Команда проведет вас через веб-поток аутентификации. После аутентификации CLI
будет хранить долгоживущий токен обновления и короткоживущий токен доступа в
каталоге `~/.config/tuist/credentials`. Каждый файл в этой директории
представляет домен, на котором вы аутентифицировались, по умолчанию это
`tuist.dev.json`. Информация, хранящаяся в этом каталоге, является
конфиденциальной, поэтому **позаботьтесь о ее сохранности**.
CLI будет автоматически искать учетные данные при выполнении запросов к серверу.
Если срок действия маркера доступа истек, CLI будет использовать маркер
обновления для получения нового маркера доступа.
## Токены OIDC {#oidc-tokens}
В средах CI, поддерживающих OpenID Connect (OIDC), Tuist может выполнять
аутентификацию автоматически, не требуя от вас управления долговременными
секретами. При работе в поддерживаемой среде CI CLI автоматически определяет
поставщика токенов OIDC и обменивает предоставленный CI токен на токен доступа
Tuist.
### Поддерживаемые поставщики услуг CI {#supported-ci-providers}
- Действия GitHub
- CircleCI
- Bitrise
### Настройка аутентификации OIDC {#setting-up-oidc-authentication}
1. **Подключите свой репозиторий к Tuist**: Следуйте руководству
GitHub integration guide, чтобы подключить свой репозиторий GitHub к проекту
Tuist.
2. **Выполните команду `tuist auth login`**: В рабочем процессе CI выполните
`tuist auth login` перед любыми командами, требующими аутентификации. CLI
автоматически определит среду CI и выполнит аутентификацию с помощью OIDC.
Примеры конфигурации для конкретного поставщика см. в руководстве
Continuous Integration guide.
### Области применения токенов OIDC {#oidc-token-scopes}
Токены OIDC получают группу охвата `ci`, которая предоставляет доступ ко всем
проектам, подключенным к репозиторию. Подробную информацию о том, что включает в
себя область видимости `ci`, см. в разделе [Группы областей
видимости](#scope-groups).
::: tip SECURITY BENEFITS
Аутентификация OIDC более безопасна, чем долгоживущие токены, потому что:
- Никаких секретов для ротации или управления
- Токены недолговечны и привязаны к отдельным рабочим процессам
- Аутентификация привязана к идентификатору хранилища.
:::
## Жетоны счета {#account-tokens}
Для сред CI, которые не поддерживают OIDC, или когда вам нужен тонкий контроль
над разрешениями, вы можете использовать токены учетных записей. Токены учетных
записей позволяют точно указать, к каким областям и проектам может получить
доступ токен.
### Создание маркера учетной записи {#creating-an-account-token}
```bash
tuist account tokens create my-account \
--scopes project:cache:read project:cache:write \
--name ci-cache-token \
--expires 1y
```
Команда принимает следующие параметры:
| Вариант | Описание |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `-области` | Требуется. Список областей, разделенных запятыми, для предоставления токена. |
| `--имя` | Требуется. Уникальный идентификатор токена (1-32 символа, только буквенно-цифровые символы, дефисы и подчеркивания). |
| `-истекает` | Необязательно. Когда срок действия токена должен истечь. Используйте формат `30d` (дни), `6m` (месяцы) или `1y` (годы). Если не указано, срок действия токена не истекает. |
| `-проекты` | Ограничьте доступ токена к определенным дескрипторам проектов. Если не указано, токен имеет доступ ко всем проектам. |
### Доступные диапазоны {#available-scopes}
| Область применения | Описание |
| ----------------------------- | ---------------------------------------- |
| `счет:члены:читать` | Читать членов учетной записи |
| `счет:члены:писать` | Управление членами учетной записи |
| `счет:реестр:читать` | Чтение из реестра пакетов Swift |
| `счет:реестр:запись` | Публикация в реестре пакетов Swift |
| `проект:превью:читать` | Скачать предварительные просмотры |
| `проект:превьюшки:писать` | Загружайте предварительные просмотры |
| `проект:администратор:читать` | Чтение настроек проекта |
| `проект:администратор:писать` | Управление настройками проекта |
| `проект:кэш:читать` | Загрузите кэшированные двоичные файлы |
| `проект:кэш:запись` | Загрузите кэшированные двоичные файлы |
| `проект:комплекты:читать` | Посмотреть комплекты |
| `проект:комплекты:писать` | Загрузка пакетов |
| `проект:тесты:читать` | Прочитать результаты тестирования |
| `проект:тесты:писать` | Загрузите результаты тестирования |
| `проект:сборки:читать` | Читайте аналитику сборки |
| `проект:сборки:писать` | Загрузите аналитику сборки |
| `проект:бегает:читает` | Выполнение команды чтения |
| `проект:бегает:пишет` | Создание и обновление командных запусков |
### Группы охвата {#scope-groups}
Группы диапазонов обеспечивают удобный способ предоставления нескольких
связанных диапазонов с одним идентификатором. Когда вы используете группу
диапазонов, она автоматически расширяется и включает все отдельные диапазоны,
которые она содержит.
| Scope Group | Входящие в комплект прицелы |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `ci` | `project:cache:write`, `project:previews:write`, `project:bundles:write`, `project:tests:write`, `project:builds:write`, `project:runs:write` |
### Непрерывная интеграция {#continuous-integration}
Для сред CI, не поддерживающих OIDC, можно создать маркер учетной записи с
группой охвата `ci` для аутентификации рабочих процессов CI:
```bash
tuist account tokens create my-account --scopes ci --name ci
```
В результате создается токен со всеми областями, необходимыми для типичных
операций CI (кэш, предварительные просмотры, пакеты, тесты, сборки и запуски).
Сохраните созданный токен как секрет в вашей среде CI и задайте его в качестве
переменной окружения `TUIST_TOKEN`.
### Управление токенами учетных записей {#managing-account-tokens}
Чтобы перечислить все токены для учетной записи:
```bash
tuist account tokens list my-account
```
Чтобы отозвать маркер по имени:
```bash
tuist account tokens revoke my-account ci-cache-token
```
### Использование токенов учетных записей {#using-account-tokens}
Токены учетных записей должны быть определены как переменная среды
`TUIST_TOKEN`:
```bash
export TUIST_TOKEN=your-account-token
```
::: tip WHEN TO USE ACCOUNT TOKENS
Используйте жетоны счета, когда вам это необходимо:
- Аутентификация в средах CI, не поддерживающих OIDC
- Тонкий контроль над операциями, которые может выполнять токен
- Токен, с помощью которого можно получить доступ к нескольким проектам в рамках
учетной записи
- Ограниченные по времени токены, срок действия которых автоматически истекает
:::