2013-02-15 6 views
2

Надеясь, что кто-то сможет исправить мою наивность, когда дело доходит до вызова простого URL-адреса приложения (которое возвращает XML) с использованием NTLMv2.Внедрение безлимитного входа в систему NTLM с Java

Я прочитал почти каждый вопрос и страницу, но я остался с одним главным любопытством. В настоящее время я использую HTTPClient (хотя это можно изменить) вместе с последним JDK (на момент написания).

Вот пример страницы, которая появляется для вызова библиотеки JCIFS: http://hc.apache.org/httpcomponents-client-ga/ntlm.html

Все выглядит хорошо, хотя и сбивает с толку, но это выдвигает на первый план вопрос о том, что многие из примеров, которые я видел, поднимает - вопрос о снабжающих NTCredentials ,

Для меня весь смысл NTLM заключается в том, что мне не нужно предоставлять учетные данные. Целевое приложение настроено на использование NTLM, поэтому наверняка должны использоваться учетные данные пользователя для текущего пользователя? Почему я должен сам предоставлять какие-либо учетные данные?

Извините, если мне не хватает чего-то очевидного здесь. Мне просто нужна самая простая для NTLM SSO возможность использования Java. Мне все равно, какая версия, я могу использовать последнее из всего.

Предоставление надежды! Спасибо за прочтение.

ответ

0

К сожалению, есть способ сделать единый вход в чистой среде Java.

NTLM не является решением для самостоятельной регистрации. NTLM является механизмом аутентификации вызова/ответа, и для него требуется хэш NTLM пароля пользователя. Машины Windows могут обеспечить единый вход с использованием NTLM, поскольку сохраняется хэш NTLM. Затем они могут вычислить ответ на вызов, основанный на сохранении хэша.

Без доступа к этому хэшу (и, насколько мне известно, вы не можете просто запросить его), вам нужно вычислить его самостоятельно. И для этого требуется пароль пользователя.

Аналогичным образом, вы можете выполнить единый вход с билетом Kerberos с использованием аутентификации SPNEGO (если, конечно, удаленная система настроена на его поддержку), но Java, к сожалению, переопределил Kerberos вместо использования системных библиотек Kerberos. Поэтому, даже если вы уже вошли в домен, вам нужно будет получить еще один билет Kerberos для Java. И это означает, что вы снова вводите свой пароль.

Единственный реалистичный способ избежать ввода пароля для аутентификации - вызвать собственные методы. В Windows это SSPI, что даст вам возможность ответить на вызов NTLM или SPNEGO. На платформах, отличных от Windows, это обрабатывается очень похожими GSSAPI и предоставляет возможность отвечать на SPNEGO (Kerberos).