Протокол входа на стороне сервера
Вам не нужно читать эту документацию, чтобы использовать tofu login. Приведённая ниже информация предназначена для тех, кто собирается реализовать серверную часть tofu login, чтобы предоставлять сервисы, совместимые с OpenTofu, в сторонней системе.
Команда tofu login поддерживает выполнение запроса авторизации OAuth 2.0 с использованием конфигурации, предоставленной целевым хостом. Возможно, вам потребуется реализовать этот протокол, если вы создаёте стороннюю реализацию каких-либо сервисов, совместимых с OpenTofu, например реестра модулей OpenTofu.
Сначала OpenTofu использует обнаружение удалённых сервисов, чтобы найти конфигурацию OAuth для хоста. Хост должен поддерживать имя сервиса login.v1 и определять для него объект со значениями конфигурации клиента OAuth, например:
{
"login.v1": {
"client": "tofu-cli",
"grant_types": ["authz_code"],
"authz": "/oauth/authorization",
"token": "/oauth/token",
"ports": [10000, 10010],
}
}Свойства объекта обнаружения перечислены ниже:
-
client(обязательное): значениеclient_id, используемое при выполнении запросов, как определено в разделе 2.2 RFC 6749.Поскольку OpenTofu является публичным клиентом (он устанавливается в системах конечных пользователей и поэтому не может защитить секрет клиента OAuth), значение
client_idносит исключительно рекомендательный характер, и сервер не должен использовать его как гарантию того, что запрос авторизации действительно поступил от OpenTofu. -
grant_types(необязательное): массив строк JSON, описывающих набор типов предоставления доступа OAuth 2.0, которые может поддерживать сервер. «Тип предоставления доступа» определяет механизм, с помощью которого сервер OAuth аутентифицирует запрос и выдаёт токен авторизации.Интерфейс командной строки OpenTofu поддерживает один тип предоставления доступа:
-
authz_code: предоставление доступа с кодом авторизации. Свойстваauthzиtokenобязательны, если указаноauthz_code.
Если
grant_typesне указано, по умолчанию используется["authz_code"]. -
-
authz(обязательное, если требуется для соответствующего типа предоставления доступа): конечная точка авторизации сервера. Если указан относительный URL, он разрешается относительно местоположения документа обнаружения сервисов. -
token(обязательное, если требуется для соответствующего типа предоставления доступа): конечная точка токена сервера. Если указан относительный URL, он разрешается относительно местоположения документа обнаружения сервисов. -
ports(необязательное): двухэлементный массив JSON, задающий включительный диапазон TCP-портов, которые OpenTofu может использовать для временного HTTP-сервера, запускаемого для предоставления конечной точки перенаправления на первом этапе предоставления доступа с кодом авторизации. OpenTofu открывает TCP-порт для прослушивания на интерфейсе loopback, чтобы получить ответ от конечной точки авторизации сервера.Если диапазон не указан, OpenTofu может выбрать любой TCP-порт с номером не менее 1024.
OpenTofu позволяет ограничить диапазон портов для взаимодействия с реализациями серверов OAuth, требующими, чтобы каждый
client_idбыл связан с фиксированным набором допустимых URL-адресов конечной точки перенаправления. Настройте такой сервер на использование диапазона URL-адресов видаhttp://localhost:10000/с последовательными номерами портов, а затем задайте этот диапазон портов с помощьюports.По возможности рекомендуется разрешить не менее 10 различных номеров портов и назначить им номера не меньше 10000, чтобы свести к минимуму риск того, что все возможные порты уже будут заняты в конкретной системе.
При запросе предоставления доступа с кодом авторизации интерфейс командной строки OpenTofu реализует расширение Proof Key for Code Exchange, чтобы защитить запрос, поступающий на конечную точку перенаправления, от перехвата другими приложениями в системе. Мы настоятельно рекомендуем выбрать реализацию сервера OAuth, которая также поддерживает это расширение и проверяет проверочный код, отправленный на конечную точку токена.
Интерфейс командной строки OpenTofu не поддерживает токены обновления OAuth и срок действия токенов. Если ваш сервер выдаёт токены с ограниченным сроком действия, после истечения срока действия токена интерфейс командной строки OpenTofu просто начнёт получать ошибки авторизации. После этого пользователь сможет снова выполнить tofu login, чтобы получить новый токен.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/internals/login-protocol/