Delphi SOAP Client Windows аутентификация сломана начиная с Delphi 10.3 - PullRequest
0 голосов
/ 05 апреля 2019

Наше клиентское приложение Delphi использует THTTPRIO для вызова службы SOAP, защищенной аутентификацией Windows (размещенной на внутреннем IIS-сервере).Код для вызова веб-службы работал нормально с Delphi XE до Delphi 10.3.В Delphi 10.3 и 10.3.1 это больше не работает.

Начиная с 10.3, 401, который сервер отправляет как часть процесса аутентификации, обрабатывается THTTPRIO как окончательный ответ html, вставленный как приглашение для отправки учетных данных, итаким образом возникает исключение (SOAP ожидает, что контент будет xml, а не html).

В примечаниях к выпуску Delphi 10.3 я читал, что реализация SOAP была изменена, но я не смог найти никаких подробностей.

Я рассмотрел публикацию кода, но фактическая публикация является частью исходного кода Delphi, и я не уверен, разрешено ли это.

Эта проблема может быть воспроизведена путем вызова любой службы SOAP при условии, что URI является толькодоступны через проверку подлинности Windows.

Любой, кто знает, как вызвать службу SOAP из приложения Delpi 10.3 с использованием аутентификации Windows?

Редактировать: то же самое клиентское приложение тестирования SOAP работает при компиляции с 10.2.3 и не при компиляциииспользуя 10.3.Поскольку разница в том, что Embarcadero перешел из WinInet в WinHTTP для SOAP, кажется, что встроенная защита не была реализована в Delphi System.Net.HttpClient.Win.pas.

Кто-нибудь, кто добавил это?

1 Ответ

0 голосов
/ 15 апреля 2019

Это оказалось проблемой winhttp, а не проблемой Delphi.Winhttp не распознал мой сервер как локальную интрасеть и, следовательно, не отправил учетные данные после получения ответа 401.

Конечно, сначала я попытался заставить мою машину W10 распознать сервер как локальную интрасеть, вызвавURL через имя хоста, а не через fqdn.Мне не удалось, я не знаю почему.

Но, добавив опцию WINHTTP_OPTION_AUTOLOGON_POLICY со значением WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW, сделали свое дело.

К сожалению, этот параметр не доступен в TWinHTTPClient Delphi, используемом в качестве альтернативы Delphi, из-за того, что Delphi выбрал другой вариант, отличный от версии Delphi, из-за которой у меня изменился вариант, отличный от версии Delphi, из-за которой у меня изменился вариант, отличный от версии Delphi, из-за которой у меня не изменился вариант с Delphi.исходный файл System.Net.HttpClient.Win.pas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...