Опишите процесс авторизации пользователя. На каком этапе жизненного цикла запроса она происходит, и возможно ли провести её до DNS-запроса?

Ответ

Это вопрос с подвохом. Авторизация пользователя до DNS-запроса в стандартном веб-сценарии невозможна и концептуально неверна.

Жизненный цикл запроса от клиента к вашему Go-бэкенду выглядит так:

  1. DNS-запрос: Браузер или клиентское приложение обращается к DNS-серверу, чтобы преобразовать доменное имя (например, api.example.com) в IP-адрес сервера, на котором работает ваше приложение.
  2. Установка TCP-соединения: Клиент устанавливает TCP-соединение с полученным IP-адресом по определённому порту (например, 443 для HTTPS).
  3. TLS Handshake: Для HTTPS-соединения происходит TLS-рукопожатие для установки зашифрованного канала связи.
  4. Отправка HTTP-запроса: Клиент отправляет HTTP-запрос на сервер. Именно в этом запросе (обычно в заголовке Authorization) содержатся учётные данные пользователя (например, JWT-токен).
  5. Авторизация на сервере: Ваше Go-приложение получает HTTP-запрос, извлекает учётные данные и проверяет их валидность и права доступа пользователя. Это и есть авторизация.

Таким образом, авторизация — это логика прикладного уровня (application layer), которая выполняется на сервере после того, как DNS-преобразование уже давно произошло и HTTP-запрос был получен.

Исключения (очень редкие и специфичные):
Теоретически, можно представить сложные сценарии с корпоративными прокси или VPN, которые требуют аутентификации на уровне сети до разрешения внешних DNS-имён, но это не имеет отношения к разработке стандартного бэкенд-приложения на Go.