Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление Проблемы Аутентификации Windows в Delphi Client после Обновления до 10.3

Delphi , ОС и Железо , Windows

Введение

Разработчики, использующие Delphi для создания клиентских приложений, иногда сталкиваются с проблемами совместимости после обновления среды разработки. Одной из таких проблем является нарушение работы аутентификации Windows в клиенте SOAP после обновления до версии Delphi 10.3. В данной статье мы рассмотрим, как была решена эта проблема, и что необходимо предпринять для её устранения.

Описание Проблемы

Пользователи столкнулись с тем, что их приложение на Delphi, использующее компонент THTTPRIO для вызова SOAP-сервиса с защитой Windows Authentication, перестало работать после обновления до версии Delphi 10.3. Приложение корректно функционировало в предыдущих версиях, начиная с Delphi XE. Проблема заключалась в том, что сервер IIS отправлял код 401 в процессе аутентификации, который вместо того чтобы запросить отправку учетных данных, обрабатывался как окончательный HTML-ответ, что приводило к исключению, так как SOAP-сервис ожидает XML-контент, а не HTML.

Причины Проблемы

В документах к релизу Delphi 10.3 упоминалось изменение реализации SOAP, однако конкретные детали не были предоставлены. Предполагается, что проблема связана с переходом Embarcadero от использования WinInet к WinHTTP для SOAP-клиентов, что могло привести к тому, что Integrated Security не был реализован в модуле Delphi System.Net.HttpClient.Win.pas.

Решение Проблемы

После дополнительного исследования было выяснено, что проблема не связана с самим Delphi, а с настройками WinHTTP. WinHTTP не распознавал сервер как часть локальной сети, и поэтому не отправлял учетные данные после получения ответа с кодом 401.

Для решения проблемы было необходимо изменить политику автологина WinHTTP, установив значение WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW с помощью опции WINHTTP_OPTION_AUTOLOGON_POLICY. Однако, эта опция не была доступна в компоненте TWinHTTPClient, используемом TSOAPClient в Delphi, что потребовало модификации исходного файла System.Net.HttpClient.Win.pas.

Пример Кода

procedure TForm1.CallSOAPService;
var
  WinHTTPOption: DWORD;
begin
  WinHTTPOption := WINHTTP_OPTION_AUTOLOGON_POLICY;
  WinHTTPSetOption(WinHttpRequest1.Handle, WinHTTPOption, Cardinal(@WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW), SizeOf(DWORD));
  // Дальнейший код для вызова SOAP-сервиса
end;

Заключение

Проблема аутентификации Windows в клиенте SOAP после обновления до Delphi 10.3 была решена путем изменения политики автологина WinHTTP. Разработчикам, столкнувшимся с подобной проблемой, рекомендуется ознакомиться с настройками WinHTTP и, при необходимости, внести соответствующие изменения в исходный код Delphi.

Дополнительные Ресурсы

Эта статья предназначена для разработчиков, использующих Delphi для создания клиентских приложений, которые сталкиваются с проблемами аутентификации после обновления среды разработки до версии 10.3.

Создано по материалам из источника по ссылке.

Проблема в клиентском приложении на Delphi после обновления до версии 10.3 связана с нарушением работы аутентификации Windows в клиенте SOAP, вызванная изменением в реализации SOAP и необходимостью изменения политики автологина WinHTTP.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:07:11/0.0031509399414062/0