Http Spec: Прокси-авторизация и заголовки авторизации
так я пытаюсь реализовать следующий сценарий:
- приложение защищено базовой аутентификацией. Допустим, он размещен на
app.com - HTTP-прокси перед приложением также требует аутентификации. Он размещен на
proxy.com
поэтому пользователь должен предоставить учетные данные как для прокси, так и для приложения в одном запросе, поэтому у него разные пары имя пользователя/пароль: одна пара для аутентифицируйте себя против приложения и другой пары имя пользователя/пароль для аутентификации себя против прокси-сервера.
после прочтения спецификаций я не совсем уверен, как я должен это реализовать. Вот о чем я думал:--15-->
- пользователь делает HTTP-запрос к прокси без какой-либо аутентификации.
- прокси-ответы
407 Proxy Authentication Requiredи возвращаетProxy-Authenticateзаголовок в формате:"Proxy-Authenticate: Basic realm="proxy.com".
вопрос: ЭтоProxy-Authenticateправильно заголовок? - затем клиент повторяет запрос с
Proxy-Authorizationзаголовок, то есть представление Base64 проксиusername:password. - на этот раз прокси аутентифицирует запрос, но затем приложение отвечает с . Пользователь был аутентифицирован прокси-сервером, но не приложением. Приложение добавляет
WWW-Authenticateзаголовок ответа, какWWW-Authenticate: Basic realm="app.com". вопрос: это значение заголовка правильно правильно? - клиент повторяет попытку запроса с помощью обоих и
Authorizationзаголовок, оцененный с представлением Base64 приложенияusername:password. - на этом этапе прокси успешно аутентифицирует запрос, перенаправляет запрос в приложение, которое также аутентифицирует пользователя. И клиент, наконец, получает ответ.
весь рабочий процесс, правильно?
1 ответов
Да, это похоже на допустимый рабочий процесс для описанной вами ситуации, и эти заголовки аутентификации, похоже, находятся в правильном формате.
интересно отметить, что для данного соединения возможно, хотя и маловероятно, задействовать несколько прокси, которые скованы вместе, и каждый из них может сам требовать аутентификации. В этом случае клиентская сторона каждого промежуточного прокси-сервера сама получит обратно 407 Proxy Authentication Required сообщение и сам повторите запрос с помощью Proxy-Authorization заголовок; с Proxy-Authenticate и Proxy-Authorization заголовки-это заголовки с одним прыжком, которые не передаются с одного сервера на другой, но WWW-Authenticate и Authorization являются сквозными заголовками, которые считаются от клиента до конечного сервера, передаваемыми дословно посредниками.
С Basic схема отправляет пароль в clear (base64-это обратимая кодировка), он чаще всего используется через SSL. Этот сценарий реализуется по-другому, потому что он желательно, чтобы прокси не видел пароль, отправленный на конечный сервер:
- клиент открывает канал SSL для прокси-сервера, чтобы инициировать запрос, но вместо отправки обычного HTTP-запроса он отправит специальный
CONNECTзапрос (по-прежнему сProxy-Authorizationзаголовок), чтобы открыть TCP-туннель для удаленного сервера. - затем клиент переходит к созданию другое SSL-канал, вложенный внутри первого, над которым он передает окончательное HTTP-сообщение, включая
Authorizationзаголовок.
в этом сценарии прокси-сервер знает только хост и порт, к которому подключен клиент, а не то, что было передано или получено по внутреннему каналу SSL. Кроме того, использование вложенных каналов позволяет клиенту "видеть" SSL-сертификаты как прокси-сервера, так и сервера, позволяя аутентифицировать идентичность обоих.