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