Недопустимые учетные данные для ldap-bind с паролем, имеющим ü

Я выполняю привязку к ldap-серверу, используя класс LdapConnection. В случае "нормального" пароля он работает нормально. Но если у пользователя есть пароль, включающий ü, ä или ö, сервер возвращает ошибку INVALID CREDENTIALS. Я предположил проблему с кодировкой, но не могу найти никаких настроек .NET-классов. Поэтому я просмотрел сетевой трафик и обнаружил, что буква «ü» представлена ​​в шестнадцатеричном формате как «fc». При использовании ldap-браузера 'ü' представляется как 'c3bc'.

var identifier = new LdapDirectoryIdentifier("myserver", 389);

var dn = "...";
var passwort = "withÜ";
var credentials = new NetworkCredential(dn, password);
var connection = new LdapConnection(identifier, credentials, AuthType.Basic);
connection.Bind(credentials);

Есть идеи по этому поводу?


person xforfun    schedule 28.09.2015    source источник


Ответы (2)


Попробуйте установить для SessionOptions ProtocolVersion LdapConnestion значение 3.

Источник:

Немецкий умлаут не был правильно транспортирован из-за версии протокола "2" в классе LdapSessionOptions LdapConnection. После установки версии протокола «3» в классе LdapSessionOptions запрос вернул результаты, как и ожидалось!

person CodingFeles    schedule 28.09.2015

Кодовая точка Unicode для ü - это шестнадцатеричный FC, как вы утверждаете. Однако при кодировании LDAP использует либо ASCII, либо UTF-8, где ü в UTF-8 представляется как HEX C3BC.

LDAP v3 позволяет использовать UTF- 8.

connection.SessionOptions.ProtocolVersion = 3;

Однако у вас есть серьезная дыра в безопасности в том, что имя пользователя и пароль передаются в открытом виде. Вы должны использовать SSL/TLS. См. Подключение к открытому LDAP через ssl.

person Richard Schneider    schedule 28.09.2015
comment
Спасибо за SSL-подсказку. SSL временно отключен для облегчения исследования сетевого трафика... ;) - person xforfun; 28.09.2015