10 Stimmen

Zugriff verweigert, da sich der aktuelle Benutzer für einen Netzwerkordner ausgibt

Versucht, die Verzeichnisse und Dateien innerhalb eines bestimmten Ordners aufzulisten. Dieser Ordner hängt vom aktuellen Benutzer (Page.User) ab, der sich über die Windows-Authentifizierung (NTLM) anmeldet und aus dem Active Directory abgerufen wird ( homedirectory Eigenschaft).

Ich verwende einen Domänenbenutzer, um auf das AD zuzugreifen und den Speicherort des Ordners abzurufen; dies funktioniert problemlos.

Was nicht funktioniert, ist das Abrufen der Unterordner mit System.IO.DirectoryInfo.GetDirectories() sogar mit Nachahmung.

Hier ist der Code, den ich für die Nachahmung verwende:

System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =  ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

Ich habe mich vergewissert, dass der Benutzer, als der er sich ausgibt, Zugriff auf den Ordner hat.

Nach dem, was ich bisher gefunden habe, scheint es, dass ich entweder eine Delegation oder eine Kerberos-Authentifizierung einrichten muss, stimmt das? Sind dies die einzigen Möglichkeiten, dies zu erreichen? Sollte Impersonation nicht ausreichend sein?

2voto

Grhm Punkte 6586

Impersonation ermöglicht es dem Webseitendienstkonto, sich als ein anderer Benutzer auszugeben (vorzutäuschen) auf dieser Maschine . Die Abfrage von AD, um zu sehen, welche Rechte Sie (oder der verkörperte Benutzer) haben, ist also erlaubt.

Die Anforderung des Zugriffs auf eine UNC-Freigabe auf einem anderen Rechner bedeutet, dass der andere Rechner akzeptieren muss, dass das Webseitendienstkonto im Namen des Benutzers handelt, für den es sich ausgibt. Dies ist Delegieren. Der andere Rechner prüft die Anmeldeinformationen des Benutzers nicht selbst, sondern delegiert diese Prüfung an den Webserver.

Wenn der Client die Website von einem anderen Rechner aus aufruft (was bei Webservern normalerweise der Fall ist), gibt es einen "Doppelsprung" vom Client zum Webserver zum UNC-Dateiserver.

Ich würde vorschlagen, dass Sie Kerberos (über das SetSPN-Dienstprogramm) konfigurieren und die Delegationsrechte für das Website-Service-Konto (innerhalb von AD-Benutzer und -Computer) aktivieren müssen. DeleConfig .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X