исключение jcifs.smb.SmbAuthException: ошибка входа в систему: неизвестное имя пользователя или неверный пароль

#authentication #ntlm #jcifs

#аутентификация #ntlm #jcifs

Вопрос:

У меня есть очень простая программа, которая записывает файл в общий файловый ресурс.

 String sample = "this is a sample content";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain_one", "username", "password");
SmbFile sFile = new SmbFile("smb://network.share.on.domain_two/folder/sample.txt", auth);
SmbFileOutputStream sfos = new SmbFileOutputStream(sFile);
sfos.write(content.getBytes());
 

Исключение аутентификации возникает в строке инициализации SmbFileOutputStream.
Я проверил, что учетные данные действительны, и этот пользователь домена (пользователь AD) имеет доступ к общему файловому ресурсу, сопоставив \network.share.on.domain_twofolder как сетевой диск, предоставив учетные данные в интерактивном режиме. Кроме того, я протестировал код, получив возможность успешно записывать файлы в \network.share.on.my_laptop folder , где этот пользователь также авторизован, и в \network.share.on.domain_one folder , где пользователь также авторизован.

Я пытаюсь понять, происходит ли сбой входа в систему в случае, когда домен сервера отличается от домена пользователя? Может ли разница в доменах быть причиной сбоя аутентификации? Кроме того, возможно ли, что NTLM в качестве метода аутентификации недоступен в общей папке, куда я не могу записать? Если да, то как я могу «определить» это на уровне кода или во время выполнения? Есть ли какие-либо примеры документации? И возможно ли, что, поскольку я могу войти в проблемный общий ресурс, сопоставив его как сетевой диск, возможно ли, что в этом сетевом ресурсе реализованы некоторые ограничительные настройки NTLM, как описано здесь: https://technet.microsoft.com/en-ca/itpro/windows/keep-secure/network-security-restrict-ntlm-ntlm-authentication-in-this-domain

Подводя итог, как я могу устранить эту проблему?

Обновление: С помощью Wireshark я смог выяснить, в чем проблема. Сервер фактически является сетевым хранилищем и поддерживает только протокол SMB2, в то время как библиотека JCIFS поддерживает только SMB1. Они все еще пытаются согласовать аутентификацию через SMB1, но это не удается.

Update2: решение пришло из «включение доверия к домену». Я изучаю точные настройки, которые необходимо было изменить. Как только я определю, каковы эти настройки, я сообщу об этом.

Ответ №1:

Оказалось, что между доменами не было настройки доверия. Как только доверие к домену было установлено, аутентификация сработала.

Комментарии:

1. что вы имеете в виду?? Есть ли еще другая конфигурация? Что это?

2. @daniel-azamar Да, где-то в домене была конфигурация, к которой мы обращались из нашего домена. К сожалению, решение никогда не было мне хорошо объяснено, кроме того, что должно было быть включено доверие к домену. Другой разработчик спросил меня, каково решение, и я начал копать, что это за исправление. Как только я найду какие-либо полезные сведения, я отправлю ответ.