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

Authentication jcifs.smb.SmbAuthException:登录失败:未知用户名或错误密码,authentication,ntlm,jcifs,Authentication,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.t

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

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\u two\folder\作为网络驱动器访问文件共享,并以交互模式提供凭据。此外,我还测试了代码,能够成功地将文件写入\\network.share.on.my\u laptop\folder\中(该用户也获得了授权),并将文件写入\\network.share.on.domain\u one\folder\中(该用户也获得了授权)

我试图了解在服务器域与用户域不同的情况下,登录是否失败?域之间的差异可能是身份验证失败的原因吗? 另外,NTLM作为身份验证方法是否可能在我无法写入的文件共享上不可用?如果是这样,我如何在代码级别或运行时“确定”它?有没有文档的例子? 而且,由于我能够通过将问题共享映射为网络驱动器登录到该共享,是否可能在该网络共享上实施一些限制性NTLM设置,如下所述:

总而言之,如何解决此问题

更新:在Wireshark的帮助下,我找到了问题所在。服务器实际上是一个网络存储,只支持SMB2协议,而JCIFS库只支持SMB1。他们仍然尝试通过SMB1协商身份验证,但失败了


更新2:解决方案来自“启用域信任”。我正在研究需要更改的确切设置。一旦我确定了这些设置是什么,我将向您报告。

结果表明,域之间没有信任设置。一旦建立了域信任,身份验证就起作用了

你什么意思??还有其他配置吗?这是什么?@daniel azamar是的,我们从我们的域访问的域中某处有一个配置。不幸的是,除了必须启用域信任之外,解决方案从未向我解释清楚。另一个开发人员问我解决方案是什么,我开始挖掘解决方案是什么。一旦发现任何有用的细节,我会发回。