•  

ГлавнаяIndyЧастые вопросы по Indy → Turbo Delphi, Indy10, прокси ISA

Создано: 17.05.2014 1:18:24 · Исправлено: 17.05.2014 1:18:24 · Прочтений: 1388

Здравствуйте Turbo Delphi, Indy10, прокси ISA (требует NTLM аутентификацию) Проблема в следующем: При вызове HTTP.GET происходит успешная аутентификация и дальше скачивает что нужно. Последующий HTTP.POST выдаёт 407 Proxy Authentication Required и прокси сервер закрывает доступ. Подскажите, как побороть.
мне пришлось править Инди10 во многих модулях. Но IdHTTP пришлось править колосально. Как оно работало до этого я не представляю. Просто умиляют некоторые вещи в исходном коде. у меня проблема другого характера. на ISA 2000 и 2006 проходит всё на ура! а вот в Squid почему. то оно не хавает. прокса видит только первые буквы из домена и имени юзера. всё остальное расшифровывает некорректно. я так понимаю у инди10 NTLMv1 используется, а в Squid NTLv2. хотя разрабы сохранили соместимость версии 2 с 1. или наши админы его так настроили,или еще, что-то. а ты можешь выслать конф Сквида? версию. и файлы idHTTP.pas и IdAuthentiocationNTLM.pas
Немного уточню по своей проблеме Версия инди 10.2.3 Беру здесь - development snapshot http://indy.fulgan.com/ZIP/indy10.zip OpenSSL 0.9.8.2 (0.9.8b) Немного поподробнее о том, что у меня работае, а что нет В приложении в uses (то, что относится к Indy): IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdAuthentication,IdAuthenticationNTLM,IdHeaderList также имеется пустая процедура:
procedure TForm1.IdHTTP1ProxyAuthorization(Sender: TObject;
  Authentication: TIdAuthentication; var Handled: Boolean);
begin
//
end;
Такой прикол - без неё ничего не работает - попробуй у себя и глянь на результат, интересно будет версию ISA не знаю, через неё GET работает так (кусочек хедера): 1. (Status-Line): HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. ) Proxy-Authenticate Negotiate Proxy-Authenticate Kerberos Proxy-Authenticate NTLM 2. (Status-Line): HTTP/1.1 407 Proxy Authentication Required ( Access is denied. ) Proxy-Authenticate NTLM TlRMTVNTUAххххххххххххх...... 3. (Status-Line): HTTP/1.1 200 OK Proxy-Connection Keep-Alive 4. (Status-Line): HTTP/1.1 200 OK Proxy-Connection Keep-Alive т.е. вроде нормально всё - на 3-м и всех последующих запросах get отрабатывает а вот последующий POST: 5. (Status-Line): HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. ) Proxy-Authenticate Negotiate Proxy-Authenticate Kerberos Proxy-Authenticate NTLM Connection close Proxy-Connection close 6. (Status-Line): HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. ) Proxy-Authenticate Negotiate Proxy-Authenticate Kerberos Proxy-Authenticate NTLM Proxy-Connection Keep-Alive 7. (Status-Line): HTTP/1.1 407 Proxy Authentication Required ( Access is denied. ) Proxy-Authenticate NTLM TlRMTVNTUAххххххххххххх...... Connection close Proxy-Connection close ну и опять по циклу как 5 - 6 - 7 8. (Status-Line): HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. ) Proxy-Authenticate Negotiate Proxy-Authenticate Kerberos Proxy-Authenticate NTLM Connection close Proxy-Connection close на 5-м и 7-м запросах сбрасывается соединение. через Squid (squid/2.6.STABLE6) GET работает так: 1. (Status-Line): HTTP/1.0 407 Proxy Authentication Required Proxy-Authenticate NTLM 2. (Status-Line): HTTP/1.0 407 Proxy Authentication Required Proxy-Authenticate NTLM TlRMTVNTUAххххххххххххх...... Proxy-Connection Keep-Alive 3. (Status-Line): HTTP/1.0 200 OK Proxy-Connection close 4. HTTP/1.0 407 Proxy Authentication Required Proxy-Connection close на 3-м запросе get однократно отработал и закрылось соединение.
А как вообще автору удалось получить что-то по GET? Судя по исходникам (10.2.3) из модуля класс для авторизации юзается правильный, только всего лишь 3 раза: RegisterAuthenticationMethod(NTLM, TIdNTLMAuthentication); TIdNTLMAuthentication.Create; TIdNTLMAuthentication.Reset; Больше ничего не вызывается. Ответ от сервера такой: HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. ) ---- VIA ISA-02. Proxy-Authenticate Negotiate Proxy-Authenticate Kerberos Proxy-Authenticate NTLM ---- Хотя как мне раньше казалось, прокси-модуль должен подключаться при первой же попытке, а у меня было только после получения 407 кода. Думаю капать надо в направлении того, чтобы сначала посмотреть как это всё пашет на BasicAuth, а потом посмотреть отчего модуль с NTLM не используется. Ну и как я понимаю, я не одинок: http://newsgroups.cryer.info/borland/public.delphi.internet.winsock/200502/0502281006.html http://delphi.newswhat.com/geoxml/forumhistorythread?grou[email protected]newsgroups.borland.com
Приветствую. После многочисленных попыток было найдено следующее решение: установка на машине Клиента межсетевого экрана ISA Servera. Брать здесь: http://www.microsoft.com/DownLoads/details.aspx?displaylang=ru&FamilyID=05c2c932-b15a-4990-b525-66380743da89 (624 КБ) После входа в домен (проверки авторизации) программа корректно работает без каких-либо настроек (прокси-сервер прописывать не нужно, всё делается системой). Такое проходит для ISA Servera. Для Squida проверить возможности нет. У кого есть - проверьте, напиши здесь (или мне) о результатах.
Спасибо огромное! Я чуть не свихнулся в поисках решения этой проблемы. Прога изумительная!=)