jcifs.smb.SmbAuthException:登录失败:未知用户名或错误密码

jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password

我有一个非常基本的程序,可以将文件写入文件共享。

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_two\folder\ 映射为网络驱动器来访问文件共享,并在交互式中提供凭据模式。此外,我已经通过能够成功将文件写入 \\network.share.on.my_laptop\folder\ 和 \\network.share.on.[=33= 来测试代码,该用户也已获得授权]\ 其中用户也被授权。

我想了解在服务器域与用户域不同的情况下是否登录失败?域的差异可能是身份验证失败的原因吗? 此外,NTLM 作为身份验证方法是否可能在我无法写入的文件共享上不可用?如果是这样,我如何 "determine" 在代码级别或运行时?有文档的例子吗? 而且,由于我能够通过将其映射为网络驱动器来登录到有问题的共享,是否有可能在该网络共享上实施一些限制性 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:解决方案来自"enabling domain trust"。我正在研究需要更改的确切设置。一旦我确定这些设置是什么,我会报告回来。

事实证明,域之间没有信任设置。一旦建立了域信任,身份验证就开始了。