Frage

Ich habe eine MVC Web-Anwendung auf einem Intranet und will in der Lage sein, Dateien auf unserem FTP-Server zu erstellen, um externe Partner zu senden.

Der Code für den Identitätswechsel verwendet die WindowsImpersonationContext.

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

StreamWriter sw = System.IO.File.CreateText("PathOnFTPServer");
sw.Write("data");

impersonationContext.Undo();

Hier ist, was passiert, und der Grund für meine Frage:

Pre-Identitätswechsel

User.Identity.Name: [mein Windows-Anmeldeinformationen]

System.Security.Principal.WindowsIdentity.GetCurrent (). Name: NT AUTHORITY \ NETWORK SERVICE

Post-Identitätswechsel

User.Identity: [mein Windows-Anmeldeinformationen]

GetCurrent.Name: [mein Windows-Anmeldeinformationen]

Impersonate Undo

User.Identity: [mein Windows-Anmeldeinformationen]

GetCurrent.Name: NT AUTHORITY \ NETWORK SERVICE

Also, bevor ich ausgeben, ist der aktuelle Benutzer das Systemkonto, sondern nach dem Identitätswechsel ist es mein Windows-Domäne-Konto, die Erlaubnis Textdateien auf dem FTP-Server zu erstellen hat. Der Code funktioniert lokal mit dem visuellen Web-Server-Studio, aber nicht, wenn ich es auf IIS auf unserem Testserver bereitstellen.

Ich erhalte einen Zugriff verweigert Fehler. Was wäre der Grund für den Fehler sein, wenn die richtigen Benutzer imitierten werden?

War es hilfreich?

Lösung

Identitätswechsel ermöglichen Maschine zu Maschine Identitätswechseln, so dass der Client-Browser und der Server auf der gleichen Seite, wenn es um den Identitätswechsel kommt. Wenn Sie dann versuchen, die Netzwerkfreigabe zuzugreifen, wird der Computer nicht den imitierten Anmeldeinformationen vertrauen.

Sie müssen in Active Directory Delegation für die IIS-Maschine zu ermöglichen. Zum Active Directory-Benutzer und -Computer, um den Computer finden, klicken Sie auf Eigenschaften, und ‚Computer für Delegierungszwecke vertrauen‘. (Möglicherweise müssen Sie IIS neu starten, damit dies funktioniert, weiß ich nicht mehr).

Es gibt viel mehr Theorie als diese, die mich nicht vollständig verstehen, aber dies sollte funktionieren. Ob es richtig ist oder nicht, jemand anderes könnte kommentieren!

Auch der Grund, es auf Ihrer Entwicklungsmaschine funktioniert, ist, dass der Entwicklungs-Server läuft als Entwickler, nicht (lokal) \ Network Service.


Ein anständiger Link:

http://msdn.microsoft.com/en-us/library/ cc949004.aspx

  

Was ist der Unterschied zwischen dem Identitätswechsel und Delegierung?

     

Identitätswechsel fließen die Identität des ursprünglichen Anrufers Ressourcen auf demselben Computer Back-End. Delegation fließt der ursprüngliche Anrufer Identität Back-End-Ressourcen auf anderen Computern als dem Computer mit dem Service.

     

Zum Beispiel, wenn ein Dienst ohne Identitätswechsel innerhalb IIS ausgeführt wird, wird die Dienst-Ressourcen zugreifen, das ASP.NET-Konto in IIS 5.0 oder das Netzwerkdienstkonto in IIS 6.0 verwenden. Mit Identitätswechsel verbindet, wenn der Kunde des ursprünglichen Anrufers Konto verwendet, wird die Service-Ressourcen zugreifen wie eine SQL Server-Datenbank auf demselben Computer-Konto des ursprünglichen Anrufers Konto statt das System ASP.NET verwenden. Delegation ist ähnlich mit der Ausnahme, dass die SQL Server-Datenbank auf einem anderen Computer sein könnte, das den Dienst entfernt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top