2016-10-15 5 views
1

Ich habe ein sehr einfaches Programm, das eine Datei in eine Dateifreigabe schreibt.jcifs.smb.SmbAuthException: Anmeldefehler: unbekannter Benutzername oder falsches Kennwort

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()); 

Die Authentifizierungsausnahme tritt in der SmbFileOutputStream-Startlinie auf. Ich habe überprüft, dass die Anmeldeinformationen gültig sind und dieser Domänenbenutzer (ein AD-Benutzer) Zugriff auf die Dateifreigabe hat, indem er \\ network.share.on.domain_two \ folder \ als Netzwerklaufwerk anordnet und Anmeldeinformationen im interaktiven Modus bereitstellt . Außerdem habe ich den Code getestet, indem ich erfolgreich Dateien in \\ network.share.on.my_laptop \ folder \ schreiben konnte, wo dieser Benutzer ebenfalls berechtigt ist, und in \\ network.share.on.domain_one \ folder \ where user ist auch berechtigt.

Ich versuche zu verstehen, ob die Anmeldung fehlschlägt, wenn die Domäne des Servers sich von der Domäne des Benutzers unterscheidet? Könnte der Unterschied in den Domänen der Grund für den Authentifizierungsfehler sein? Ist es auch möglich, dass NTLM als Authentifizierungsmethode nicht auf der Dateifreigabe verfügbar ist, wo ich nicht schreiben kann? Wenn ja, wie kann ich das auf Codeebene oder zur Laufzeit "bestimmen"? Gibt es Beispiele für Dokumentation? Und ist es möglich, dass, da ich in der Lage bin zu dem unruhigen Anteil anmelden, indem sie es als Netzlaufwerk abzubilden, ist es möglich, dass einige restriktiven NTLM-Einstellungen auf diesem Netzwerkfreigabe implementiert sind, wie hier beschrieben: https://technet.microsoft.com/en-ca/itpro/windows/keep-secure/network-security-restrict-ntlm-ntlm-authentication-in-this-domain

zu zusammenfassen, wie kann ich dieses Problem beheben?

Update: Mit Hilfe von Wireshark konnte ich herausfinden, was das Problem ist. Der Server ist tatsächlich ein Netzwerkspeicher und unterstützt nur das SMB2-Protokoll, während die JCIFS-Bibliothek nur SMB1 unterstützt. Sie versuchen immer noch, die Authentifizierung über SMB1 zu verhandeln, aber es schlägt fehl.

Update2: Die Lösung kam von "Aktivierung der Domänenvertrauensstellung". Ich untersuche die genauen Einstellungen, die geändert werden müssen. Sobald ich festgestellt habe, was diese Einstellungen sind, melde ich mich zurück.

Antwort

1

Es stellte sich heraus, dass zwischen den Domänen keine Vertrauensstellung eingerichtet wurde. Sobald die Domänenvertrauensstellung eingerichtet wurde, funktionierte die Authentifizierung.

+0

was meinst du ?? Gibt es noch eine andere Konfiguration? Was ist es? –

+0

@ daniel-azamar Ja, irgendwo in der Domain, auf die wir von unserer Domain aus zugegriffen haben, gab es eine Config. Leider wurde mir die Lösung nie gut erklärt, außer dass die Domain-Trust aktiviert werden musste. Ein anderer Entwickler hatte mich gefragt, was die Lösung war und ich begann zu graben, was diese Lösung war. Sobald ich irgendwelche hilfreichen Details finde, werde ich zurück posten. – VilleLipponen

+0

Danke !!! Ich habe diesen Albtraum gemacht. –

Verwandte Themen