2016-10-15 166 views
1

我有一個非常基本的程序,將文件寫入文件共享。jcifs.smb.SmbAuthException:登錄失敗:未知的用戶名或密碼錯誤

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.domain_one \ folder \ where用戶來測試代碼也被授權。

我想了解在服務器的域與用戶的域不同的情況下,登錄是否失敗?域中的差異可能是認證失敗的原因嗎? 另外,有可能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

原來,域之間沒有信任設置。域信任一旦建立,認證就起作用。

+0

你是什麼意思?還有其他配置嗎?它是什麼? –

+0

@ daniel-azamar是的,我們從域中訪問的域中有一個配置。不幸的是,除了必須啓用域信任之外,解決方案對我來說從未解釋得很好。另一位開發人員問我解決方案是什麼,並開始挖掘解決方案。一旦發現任何有用的細節,我會回覆。 – VilleLipponen

+0

謝謝!我已經完成了那個噩夢。 –

相關問題