Поддерживает ли аутентификация Indy 10 Tidwebdav аутентификации пользователей, у которых есть символы Unicode в имени пользователя?
Вопрос
Автор веб-сервиса, к которому я пытаюсь подключиться, говорит мне, что имя пользователя, которое я отправляю в модуль веб-сервера Apache Webdav, входит без кодирования = UTF-8 в заголовках или кодирование MIME64 Ожидается для заголовков, и, таким образом, загрузка пользователя пользователя, который может содержать символы Unicode, не принимается и декодируется.
Я хочу знать, могу ли я каким -то образом установить свойство в Tidwebdav, которое изменит то, как оно выполняет кодирование HTTP, таким образом, что позволит аутентификацию имени пользователя, которое содержит символы Unicode, которые не могут быть показаны в простом ASCII. Я подумал, что, может быть, собственность AuthenticationManager может иметь к этому какое -то отношение. В Documetnation Indy 9 он говорит: «Это свойство ничего не делает». Это делает что -то в Indy 10? Похоже, он реализован.
Тайны, которые я еще не понимаю, включают:
(1) Что делает «logintype» (с целочисленным значением) в WebDav и на какие значения я его устанавливает? В настоящее время код, который я установил на 3.
(2) Нужно ли навязать кодирующие параметры с помощью hoforceencodeparams?
(3) Как мне осмотреть заголовки в форме, которую удаленная сторона увидит их?
Обновление: как говорит Реми, аутентификация NTLM поддерживает символы Unicode. Я также обнаружил, что вы можете использовать кодируемые строки Unicode UTF8 (Base64) в базовой аутентификации, в форме «Имя пользователя: пароль».
Решение
Цель TIdAuthenticationManager
это сохранить кэш параметров аутентификации, используется для успешного входа в конкретные URL -адреса. Больше ничего. TIdHTTP
не использует этот кэш во время аутентификации, но вы можете использовать его самостоятельно в OnSelectAuthentication
а также OnAuthentication
События, если это необходимо.
Какая схема аутентификации фактически используется в этой ситуации? В каком заголовке (ы) модуль WebDAV ожидает указан кодировки символа? В Indy 10 классы NTLM поддерживают строки Unicode во время хэширования, но они используют UTF-16, а не UTF-8.
Может ли автор Webdav предоставить больше информации о том, чего он на самом деле ожидает от вас?
Чтобы ответить на другие вопросы:
(1) Какой «логинтип» вы имеете в виду? В Инди нет такого свойства или параметра.
(2) Hoforceencodeparams применяется только при вызове post () для отправки объекта TStrings для запросов «Application/XWW-Form-UrlencoDed». Это не влияет на аутентификацию.
(3) Чтобы увидеть, какие данные передаются вперед и назад через соединение, вы можете подключить TIdLog...
компонент, такой как TIdLogFile
или же TIdLogEvent
, в Intercept
имущество. Или иначе используйте внешний пакет, такой как Wireshark.