Java-способ проверки подлинности NTLM через LDAP для получения имени пользователя и домена - PullRequest
0 голосов
/ 04 июня 2018

Клиент запросил реализацию простого SSO-подобного валидатора NTLM.Поэтому мне нужно найти способ проверить, вошел ли какой пользователь в систему при попытке подключиться к серверу.

С JavaScript у меня ушло около 5 минут с этим пакетом: https://www.npmjs.com/package/express-ntlm

Вы можете определить LDAP-сервер для пакета, и согласование NTLM приведет к «DomainName», «UserName"," Рабочая станция "и" Аутентифицированные "значения.У меня есть успешная реализация.

Есть ли библиотека или другие нативные способы сделать это с помощью Java так же просто, как с NodeJS-сервером?

Для какого-то решения, которое я нашел, потребуются учетные данные, который я не имею или не хочу предоставлять.Решение JavaScript работает только с предоставленным сервером LDAP, поэтому я уверен, что они мне не нужны.

1 Ответ

0 голосов
/ 07 июня 2018

Ваш вопрос мне не совсем понятен, но я попробую ответить на часть native и улучшу этот ответ в то же время, что более или менее относится кта же тема.

Начиная с JDK 7, мы видим следующий com.sun.security.ntlm собственный пакет, который

$ unzip -l 1.7/jre/lib/rt.jar | grep -i ntlm
 4243  2015-04-10 19:56   com/sun/security/ntlm/Client.class
 1568  2015-04-10 19:56   com/sun/security/ntlm/NTLM$Reader.class
 1831  2015-04-10 19:56   com/sun/security/ntlm/NTLM$Writer.class
 6486  2015-04-10 19:56   com/sun/security/ntlm/NTLM.class
  617  2015-04-10 19:56   com/sun/security/ntlm/NTLMException.class
 3763  2015-04-10 19:58   com/sun/security/ntlm/Server.class
  939  2015-04-10 19:56   com/sun/security/ntlm/Version.class
  ... ...

К сожалению, этот пакет не предназначен для непосредственного использования, как объяснено в Oracle JDK-6982971 ошибка , которая гласит:

Пакет com.sun.security.ntlm и классы внутри него не отображаются как NON_CORE_PKGS и там не видны для javac.

Оттуда решение native опирается на этот обходной путь: скомпилируйте код со всеми исходными файлами com.sun.security.ntlm, которые можно загрузить из здесь , например Client.java , NTLM.java , .. метод Server.verify, предоставляющий вам доступ к параметрам, которые вы указали в своем вопросе.Обратите внимание, что это свойство отладки может вам помочь (-Dntlm.debug).

В этой реализации имейте в виду, что оно не скомпилируется до JDK 1.7, так как есть вызов String в switch Statement хотя вы могли бы легко перенести обратно на более раннюю версию Java.

Я рекомендую использовать последний доступный источник, так как ошибки могут быть трудно отследить (например, Java 7) Примечания к выпуску поддержки ,На момент написания статьи, насколько мне известно, текущие версии для использования перечислены в ошибке OpenJDK JDK-7150092 .

. Пока я не кодировал ни один сервер с этим методом, нотолько HTTP-клиент около 100 строк, и это демонстрирует технику.И последнее, что нужно знать, родные классы, о которых я говорю, не многопоточные.

...