Назад | Перейти на главную страницу

HTTP-дайджест-аутентификация на прокси-сервере

У меня есть 1.) клиент, 2.) прокси-сервер на базе nginx и 3.) некоторые серверы, адреса которых недоступны для клиента, прокси обрабатывает связь от клиента к этим серверам.

Пока работает нормально. Но теперь некоторые из этих серверов требуют аутентификации с помощью дайджеста HTTP вместо базовой аутентификации HTTP, и клиент больше не может правильно аутентифицироваться на этих серверах.

Благодаря wget и Wireshark мне удалось немного решить проблему.

HTTP-заголовок работающей аутентификации выглядит так:

GET /targetpath/myfile.jpg HTTP/1.1
User-Agent: Wget/1.15 (linux-gnu)
Accept: */*
Host: 192.168.5.215
Connection: Keep-Alive
Authorization: Digest username="myuser", realm="MyRealm", nonce="x+AfVa0pBQA=ad6ef47eb7e95f9fe8e148a9ccd22dcdb3b8a7f6", uri="/targetpath/myfile.jpg", response="6f7cf06ddededd7295ce3a16b4196528", qop=auth, nc=00000001, cnonce="26310a3e", algorithm="MD5"

Заголовок неработающей аутентификации, выполненной прокси, выглядит немного иначе:

GET /targetpath/myfile.jpg HTTP/1.0
Connection: Keep-Alive
Host: 192.168.5.215
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0
Referer: http://localhost/
Authorization: Digest username="MyUser", realm="MyRealm", nonce="Sh3xpq0pBQA=ccc43b898eccd1933fa63383d8a6447385119db9", uri="/proxypath/192.168.5.215/targetpath/myfile.jpg", algorithm=MD5, response="068f00e3460e4b585b4a90fa76be8b27", qop=auth, nc=00000003, cnonce="cbe75557a6107092"

Обратите внимание на разницу в uri в заголовке авторизации. Это, конечно, путь запроса прокси-сервера. (Поскольку клиент обрабатывает аутентификацию, прокси-сервер только передает данные и перезаписывает URL-адрес) Я подозреваю, что проблема в этом. (Обратите внимание, что я не могу отлаживать непосредственно на целевых серверах, чтобы проверить это)

Итак, возникает вопрос: есть ли способ динамически переписать авторизацию перед ее передачей на целевой сервер? Есть ли способ позволить прокси-серверу обрабатывать аутентификацию вместо того, чтобы просто передавать ее от клиента? Или есть другой / лучший подход?