# Авторизация (/ru/docs/requests/auth)

Вкладка **Авторизация** определяет, как запрос подтверждает, кто он. Выберите **Тип**, заполните его поля — и Echolot
добавляет учётные данные при каждой отправке. Задайте авторизацию один раз для папки или рабочего пространства, и её
смогут использовать все запросы внутри.

<Shot id="requests-http-auth-oauth" alt="Вкладка «Авторизация» запроса Orders with OAuth 2: OAuth 2.0 с грантом «Учётные данные клиента», URL токена, ID клиента и область доступа, внизу панель токена с кнопкой «Получить токен»" />

## Не храните учётные данные в файлах [#keep-credentials-out-of-files]

Любое поле принимает `{{variables}}`. Пароли, токены и ключи храните в [секретных переменных](/docs/workspaces/secrets),
которые лежат в Связке ключей, а в поле пишите `{{password}}`. Тогда файл запроса не содержит секретов, и его можно
коммитить.

Если ввести в поле учётных данных готовое значение, под ним появится предупреждение: **Сохраняется открытым текстом в
файле рабочего пространства.** Нажмите **Переместить в Связку ключей** — Echolot сохранит значение как секретную
переменную рабочего пространства и вместо него запишет `{{name}}`.

Учётные данные, которые добавляет Echolot, скрыты там, где их показывает страница запроса: в **АВТОМАТИЧЕСКИХ**
заголовках и в предпросмотре URL под строкой адреса.

## Наследование от папок и рабочего пространства [#inherit-from-folders-and-the-workspace]

**Наследовать** — значение по умолчанию. Запрос с наследованием использует авторизацию ближайшей папки выше, которая её
задаёт, а затем авторизацию рабочего пространства. Под **Использует** вкладка показывает, какая из них действует,
например `Folder “Orders”: Bearer Token`, и кнопку, которая её открывает: **Изменить авторизацию папки…** или
**Изменить авторизацию рабочего пространства…**. Если выше авторизация нигде не задана, запрос отправляется без неё.

<Shot id="requests-http-auth-inherit" alt="Вкладка «Авторизация» запроса со значением «Наследовать»: Использует Папка «Orders»: Bearer-токен, кнопка «Изменить авторизацию папки…»" />

Запрос с собственной авторизацией сохраняет её, а на его вкладке **Авторизация** есть ещё строка **Авторизация
рабочего пространства** с авторизацией рабочего пространства и кнопкой, которая её открывает: **Авторизация рабочего
пространства…**, а если в рабочем пространстве её ещё нет — **Настроить авторизацию рабочего пространства…**.
**Авторизация рабочего пространства…** есть и в палитре команд (<kbd>⌘</kbd><kbd>K</kbd>).

Чтобы задать авторизацию сразу для многих запросов:

1. В боковой панели щёлкните папку правой кнопкой и выберите **Настройки папки…**. Для рабочего пространства выберите
   **Авторизация рабочего пространства…** на вкладке **Авторизация** запроса или в палитре команд, либо нажмите
   переключатель рабочих пространств внизу боковой панели и выберите **Настройки рабочего пространства…**.
2. Откройте вкладку **Авторизация** и выберите тип. Папка тоже может наследовать, рабочее пространство — нет. Под
   настройками вкладка показывает, сколько запросов с **Наследовать** используют эту авторизацию.
3. Для OAuth 2.0 войдите прямо здесь: панель токена внизу работает так же, как в запросе (см.
   [OAuth 2.0](#oauth-20)), и токен используют все запросы, которые наследуют эту авторизацию. **Получить токен**
   сначала сохраняет авторизацию. Панель показывает токен самой папки или рабочего пространства, только когда их
   авторизация сохранена, поэтому она никогда не показывает и не забывает токен, принадлежащий авторизации выше.
4. Нажмите **Готово**.

<Shot id="workspaces-folder-auth-oauth" alt="Настройки папки на вкладке «Авторизация» с выбранным OAuth 2.0, URL токена и клиент, панель токена с кнопкой «Получить токен» и число запросов, которые её наследуют" />

В примере Alpenglow папка **Orders** задаёт **Bearer-токен** со значением `{{token}}`, и все запросы заказов его
наследуют. **Auth › Sign in** записывает `{{token}}` из своего ответа с помощью
[захвата](/docs/requests/captures).

## Выбор типа [#choose-a-type]

| Тип | Что делает Echolot |
| --- | --- |
| **Наследовать** | Использует авторизацию папки или рабочего пространства. |
| **Без авторизации** | Не отправляет учётные данные, даже если их задаёт папка. |
| **Basic** | Добавляет `Authorization: Basic …` из имени пользователя и пароля. |
| **Digest** | Отвечает на Digest-запрос сервера. |
| **Bearer-токен** | Добавляет `Authorization: Bearer <token>`. |
| **API-ключ** | Добавляет ключ как заголовок или параметр запроса. |
| **OAuth 1.0** | Подписывает каждый запрос по OAuth 1.0 токеном, который у вас уже есть. |
| **OAuth 2.0** | Получает токен доступа и отправляет его как Bearer-токен или в адресе. |
| **AWS Signature** | Подписывает каждый запрос по AWS Signature Version 4. |
| **JWT Bearer** | Подписывает новый JSON Web Token при каждой отправке. |
| **Hawk** | Подписывает каждый запрос по Hawk. |
| **Akamai EdgeGrid** | Подписывает каждый запрос по EG1-HMAC-SHA256. |
| **NTLM** | Отвечает на NTLM-запрос сервера. |

Заголовок `Authorization`, который вы добавили сами на вкладке **Заголовки**, отправляется вместо того, что добавила бы
вкладка **Авторизация**.

### Basic [#basic]

Заполните **Имя пользователя** и **Пароль**. Echolot отправляет их в заголовке `Authorization` в кодировке Base64.
Попробуйте на **Echo › Basic auth** в Alpenglow.

### Digest [#digest]

Заполните **Имя пользователя** и **Пароль**. Первая отправка уходит без учётных данных; когда сервер отвечает 401 с
Digest-запросом, Echolot отвечает на него один раз вторым запросом. Оба показаны в обмене как переходы.

### Bearer-токен [#bearer-token]

Заполните **Токен**, обычно `{{token}}`. **Префикс** по умолчанию — `Bearer`; измените его для сервера, который ждёт
другое слово, или очистите, чтобы отправлять один токен.

### API-ключ [#api-key]

Заполните **Ключ** (имя заголовка или параметра, по умолчанию `X-API-Key`) и **Значение**, затем в поле **Добавить в**
выберите, куда его поместить: **Заголовок** или **Запрос**.

### OAuth 2.0 [#oauth-20]

Echolot получает токен доступа сам и добавляет его как `Authorization: Bearer <token>`.

| Поле | Значение |
| --- | --- |
| **Грант** | **Код авторизации**, **Учётные данные клиента**, **Код устройства** или **Пароль (устаревший)**. |
| **URL авторизации** | Где вы входите (Код авторизации). |
| **URL устройства** | Откуда берётся код устройства (Код устройства). |
| **URL токена** | Откуда берутся токены. |
| **Имя пользователя**, **Пароль** | Собственный вход пользователя (Пароль). Пароль можно переместить в Связку ключей, как любые другие учётные данные. |
| **ID клиента**, **Секрет клиента** | Учётные данные клиента. Публичные клиенты оставляют секрет пустым. |
| **Область доступа** | Запрашиваемые области через пробел, например `read write`. |
| **Аудитория** | Для серверов, которым она нужна. |
| **URI перенаправления** | Код авторизации. Пусто — автоматически: адрес замыкания на себя `http://127.0.0.1:<port>/callback` на свободном порту. |
| **PKCE (S256)** | Код авторизации. По умолчанию включено. |
| **Аутентификация клиента** | Как ID и секрет клиента попадают на URL токена: **HTTP Basic** (по умолчанию) или **В теле**. |
| **Добавить токен в** | **Заголовок** (по умолчанию) или **URL**: токен как параметр запроса с именем из поля **Параметр** (по умолчанию `access_token`). Адреса попадают в журналы и историю, поэтому URL используйте только для API, которые ничего другого не принимают. |
| **Префикс заголовка** | Слово перед токеном в заголовке, по умолчанию `Bearer`. |

Внизу вкладки панель токена показывает, есть ли токен. Нажмите **Получить токен**:

- **Код авторизации** открывает браузер на URL авторизации. Войдите там; Echolot перехватывает перенаправление и
  показывает **Завершите вход в браузере…**, пока вы не закончите.
- **Код устройства** показывает **Войти на другом устройстве** и код. Нажмите **Открыть** (рядом имя хоста страницы),
  введите там код и подтвердите; Echolot ждёт, показывая **Ожидание одобрения…**.
- **Учётные данные клиента** обращаются прямо к URL токена. Для этого гранта нажимать **Получить токен** не нужно:
  первая отправка получает токен сама.
- **Пароль (устаревший)** отправляет имя пользователя и пароль на URL токена и тоже не требует нажатия: первая
  отправка получает токен. Используйте его только для старых API, которым он нужен. Этот грант устарел, потому что
  сам пароль покидает ваш Mac, поэтому, если сервер поддерживает Код авторизации, выбирайте его.

Неявного гранта, который тоже устарел, Echolot не предлагает. Большинство серверов, которые его ещё поддерживают,
поддерживают и Код авторизации — им становится импортированный неявный грант; проверьте, что сервер его принимает.

Когда токен есть, панель показывает **Токен доступа в Связке ключей** с его типом, сроком действия, признаком
**обновляется автоматически** и областью доступа. **Получить новый токен** заменяет его; **Забыть** удаляет.

Как токены хранятся и используются:

- Токены хранятся в Связке ключей и никогда не попадают в файлы рабочего пространства.
- Токен принадлежит запросу, папке или рабочему пространству, которые задают авторизацию, а также окружению и
  настройкам, для которых он выпущен: при смене окружения или изменении URL токена, ID клиента, области доступа или
  другой настройки, определяющей, для кого токен, используется или получается отдельный токен, а токен, выпущенный
  для другого, никогда не отправляется. Запросы, которые наследуют OAuth от папки, делят её токены. **Забыть**
  удаляет токены всех окружений.
- Когда срок токена истёк, следующая отправка обновляет его с помощью токена обновления. Токен Учётных данных клиента
  или Пароля запрашивается заново. Иначе отправка останавливается с сообщением о том, что запросу нужен токен OAuth и
  его сначала надо получить на вкладке «Авторизация», либо что срок токена OAuth истёк и обновить его не удалось.

Чтобы попробовать, отправьте **Auth › Orders with OAuth 2** в Alpenglow: он использует Учётные данные клиента с
демо-API.

#### Дополнительно [#advanced]

Большинству серверов это не нужно, поэтому раздел свёрнут под **Дополнительно**. Он раскрывается сам, если в нём что-то
задано.

<Shot id="requests-http-auth-oauth-advanced" alt="Раздел «Дополнительно» OAuth 2.0: «Обновлять автоматически», URL обновления и таблицы параметров «Запрос авторизации», «Запрос токена» и «Запрос обновления»" />

- **Обновлять автоматически** по умолчанию включено. Выключите, чтобы отправлять просроченный токен как есть и
  посмотреть, как на него ответит API. Первый токен для Учётных данных клиента и Пароля всё равно запрашивается.
- **URL обновления** нужен серверам, у которых конечная точка обновления — не URL токена. Пусто — используется URL
  токена.
- **Запрос авторизации**, **Запрос токена** и **Запрос обновления** добавляют параметры для серверов, которым нужно
  больше стандартных полей: `access_type = offline` у Google (чтобы он выдал токен обновления), `resource` для
  Azure AD, тенант или версию API. В каждой строке есть ключ, значение (переменные работают, так что секреты могут
  оставаться в Связке ключей) и, для запросов токена и обновления, место назначения: **Тело**, **Заголовок** или
  **URL**. Параметр с тем же именем, что у стандартного, заменяет его. Параметры запроса авторизации попадают в адрес
  входа или, для Кода устройства, в запрос авторизации устройства. Они никогда не заменяют `state` или PKCE-вызов.

### OAuth 1.0 [#oauth-10]

Для API, которые всё ещё используют OAuth 1.0: NetSuite, Magento и Adobe Commerce, конечные точки X версии v1.1,
связи приложений Jira и Confluence Server и другие. Echolot подписывает каждый запрос токеном, который у вас уже есть.
Трёхсторонний сценарий получения токена он не выполняет — как и Postman.

<Shot id="requests-http-auth-oauth1" alt="Вкладка «Авторизация» с OAuth 1.0: метод подписи, ключ и секрет потребителя, токен доступа и секрет токена, «Добавить в» — «Заголовок»" />

1. Выберите **Метод подписи**: **HMAC-SHA1** (самый распространённый), **HMAC-SHA256**, **HMAC-SHA512**,
   **RSA-SHA1**, **RSA-SHA256**, **RSA-SHA512** или **PLAINTEXT**.
2. Заполните **Ключ потребителя**, затем **Секрет потребителя** или, для RSA, **Закрытый ключ** (вставьте его или
   нажмите **Выбрать PEM-файл…**, чтобы сразу положить его в Связку ключей).
3. Заполните **Токен доступа** и, кроме RSA, **Секрет токена**. Оставьте их пустыми для запроса, который делается до
   получения токена.
4. В поле **Добавить в** выберите **Заголовок** (`Authorization: OAuth …`, по умолчанию), **URL** или **Тело**. **Тело**
   подписывает данные формы в теле или, если тела нет, адрес.
5. В разделе **Дополнительно** есть **Realm**, **URL обратного вызова** и **Верификатор** (для шагов трёхстороннего
   сценария, которые вы выполняете вручную), **Добавить oauth_version="1.0"** (по умолчанию включено) и
   **Хешировать тело в подпись** (`oauth_body_hash`, для тел, которые не являются формами).

Каждый запрос подписывается в момент отправки, с новой отметкой времени и nonce, по методу, адресу, его параметрам
запроса и полям формы в теле.

### AWS Signature [#aws-signature]

Заполните **ID ключа доступа**, **Секретный ключ доступа**, **Регион** (по умолчанию `us-east-1`) и **Сервис** (по
умолчанию `execute-api`; `s3`, `lambda`, `es` и так далее). **Токен сеанса** нужен только для временных учётных
данных. Каждый запрос подписывается в момент отправки, по времени, хосту и телу, с которыми он уходит.

### JWT Bearer [#jwt-bearer]

Echolot подписывает новый токен при каждой отправке.

1. Выберите **Алгоритм**: **HS256**, **HS384** или **HS512** (HMAC с секретом), **RS256**, **RS384**, **RS512**,
   **PS256**, **PS384** или **PS512** (закрытый ключ RSA), либо **ES256** или **ES384** (закрытый ключ на эллиптической
   кривой).
2. Для HMAC заполните **Секрет**; отметьте **Секрет в Base64**, если провайдер выдал его в таком виде. Закрытый ключ
   вставьте в **Закрытый ключ** или нажмите **Выбрать PEM-файл…**: ключ сразу попадает в Связку ключей, а поле
   ссылается на него по имени. Ключи могут быть в PEM-форматах PKCS #8, PKCS #1 или SEC 1.
3. Запишите **Claims** в виде JSON. В них можно использовать переменные: `{"sub": "{{userID}}"}`.
4. Добавьте **Поля заголовка**, например `kid`, если они нужны серверу. `alg` и `typ` задаются сами.
5. **Добавить «iat» (время выпуска)** по умолчанию включено. **Истекает через** добавляет `exp` на указанное число
   секунд вперёд (по умолчанию 300); 0 не добавляет ничего. Claims, которые вы задали в JSON сами, сохраняются как
   написаны.
6. В поле **Добавить в** выберите **Заголовок** (с **Префиксом**, по умолчанию `Bearer`) или **Запрос** (с именем
   **Параметра**, по умолчанию `token`).

### Hawk [#hawk]

Заполните **ID** и **Ключ**, выберите **Алгоритм** (**SHA-256** или **SHA-1**) и добавьте **Данные приложения (ext)**,
если они нужны серверу. Отметьте **Хешировать тело в подпись**, чтобы включить в неё хеш нагрузки. Каждый запрос
подписывается по времени, nonce, методу, пути, хосту и порту.

### Akamai EdgeGrid [#akamai-edgegrid]

Заполните **Токен клиента**, **Секрет клиента** и **Токен доступа**. **Подписываемые заголовки** — список через
запятую, обычно пустой. **Подписываемые байты тела** ограничивает, какая часть тела POST хешируется (по умолчанию
131072).

### NTLM [#ntlm]

Заполните **Имя пользователя** и **Пароль**, а также **Домен** и **Рабочую станцию**, если они нужны серверу. Echolot
поддерживает NTLMv2: он отвечает на запрос сервера по тому же соединению, а ответы 401 остаются в обмене как переходы.

NTLM аутентифицирует соединение, а не запрос, поэтому ему нужен HTTP/1.1. Если **Версия HTTP** — **Автоматически**,
Echolot использует HTTP/1.1 для запросов NTLM; если выбран **HTTP/2** или **HTTP/3**, отправка отклоняется. См.
[Настройки запроса](/docs/requests/settings#http-version).

## Учётные данные остаются со своим источником [#credentials-stay-with-their-origin]

Когда перенаправление ведёт на другой источник (другую схему, хост или порт), Echolot не переносит туда ваши учётные
данные. Он отбрасывает:

- заголовки `Authorization`, `Proxy-Authorization` и `Cookie`;
- распространённые заголовки API-ключей (`X-API-Key`, `Api-Key`, `Apikey`, `X-Auth-Token`, `X-Access-Token`,
  `Private-Token`, `X-Functions-Key`), заголовок, который использует ваша авторизация **API-ключ**, и любой
  заголовок, значение которого содержит секретную переменную;
- подпись Digest, AWS Signature, OAuth 1.0, Hawk, EdgeGrid и NTLM, а также клиентский сертификат, выбранный для первого
  хоста.

Сертификаты и прокси нового хоста применяются к переходу на него. См.
[Настройки запроса](/docs/requests/settings#redirects).

## Защищённые окружения [#protected-environments]

**Получить токен** тоже отправляет запрос. Если окружение окна защищено, сначала он спрашивает подтверждение, как и
**Отправить**. См. [Защищённые окружения](/docs/workspaces/protected-environments).
