Frage

Ich habe eine ASP.NET-Website auf einem Windows 2003 Server, die Dateien zugreifen, von einer Netzwerkfreigabe muss. Die Netzwerkfreigabe ist passwortgeschützt und muss einen Benutzernamen und ein Passwort zur Verfügung gestellt werden.

I Formulare verwenden basierte Authentifizierung auf der Website und nicht Windows-basierte.

Also mein Problem ist, wenn ich versuche, eine Datei aus dem Netzwerkfreigabe zu lesen unter Verwendung des Codes, es Zugriff verweigern Würfe Directorynetwork = new Directory ( "\\ Testserver \ Share");

Also habe ich versucht, mit Impersonate durch die Benutzername und das Passwort des Netzwerkfreigabe an den impersonate Funktionsaufruf bereitstellt, aber der Anruf nicht offensichtlich, da der Benutzername nicht auf dem ASP.NET Web-Server nicht vorhanden ist. Also ging ich die Benutzername und das Kennwort eines Login, die auf dem Web-Server vorhanden ist, so dass in dieser Zeit der impersonate Aufruf funktioniert aber immer noch kann es nicht die Netzwerkfreigabe zugreifen ‚Cuz der Netzwerkfreigabe Benutzername und Passwort ist unterschiedlich.

So endlich, habe ich genau die gleiche Benutzername / Passwort auf dem Webserver, der die Netzwerkfreigabe übereinstimmt. Dieses Mal impersonate Funktionsaufruf arbeitet und so auch Netzwerkfreigabe. Ich bin in der Lage, erfolgreich aus den Aktien zu lesen.

Also meine Frage ist, gibt es eine Möglichkeit, die Netzwerkfreigabe lesen kann, die Benutzername in dem Webserver ohne Zugabe. ‚Cuz jedes Mal die Netzwerkfreigabe Login ändert, werde ich wieder einen neuen Benutzernamen machen auch in den Webserver. Welche ist nicht ideal.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Der „richtige“ Weg, dies zu tun, ist der Webserver des AppPool als die Identität auszuführen, die auf die Freigabe zugreifen können. Auf diese Weise ist die einzige Speicherung von Anmeldeinformationen sicher in der IIS-Konfiguration erfolgt (und nicht im Code oder in lesbaren Konfigurationsdateien). Putting die Webserver und File-Server in derselben Windows-Domäne (oder verschiedene Domänen mit Vertrauen) ist der einfachste Weg, aber das „gleichen Benutzername / Passwort“, was sollte es auch funktionieren.

Wenn Sie nicht über das Setzen Benutzername / Kennwörter in Ihrem Code oder Config egal, können Sie P / Invoke auf WNetAddConnection2 und übergeben Sie der Benutzername / Passwort-, dann sollten Sie in der Lage sein, auf die Freigabe zuzugreifen. Dies gilt nicht den Webserver benötigt ein entsprechendes Konto haben, aber Sie sollten wirklich das Passwort sichern (schauen Sie in System.Security.Cryptography.ProtectedData für verschlüsselte Registrierungsspeicher).

Andere Tipps

try this

WebRequest request = WebRequest.Create( "http://server/file.xml" );
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "user", "pass" );

request.GetResponse();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top