2009-09-10 2 views
19

Mam aplikację internetową MVC w intranecie i chcę mieć możliwość tworzenia plików na naszym serwerze FTP w celu wysyłania do partnerów zewnętrznych.Podszywanie się pod ASP.NET MVC

Kod podszywania się używa 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(); 

Oto co się dzieje, a powodem moje pytanie:

Pre personifikacji

User.Identity.Name: [moje okna poświadczenia]

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

Post personifikacji

User.Identity: [moje okna poświadczenia]

GetCurrent.Name: [moje okna poświadczenia]

Impersonate Cofnij

User.Identity: [moje okna poświadczenia]

GetCurrent.Name: NT AUTHORITY \ NETWORK SERVICE

Tak więc, zanim podam się za użytkownika, bieżącym użytkownikiem jest Konto systemowe, ale po podszywaniu się używa mojego konta domeny Windows, które ma uprawnienia do tworzenia plików tekstowych na serwerze FTP. Kod działa lokalnie przy użyciu serwera WWW Visual Studio, ale nie wtedy, gdy wdrażam go w IIS na naszym serwerze testowym.

Otrzymuję błąd odmowy dostępu. Jaki byłby powód błędu, gdy podszywany jest właściwy użytkownik?

Odpowiedz

22

Podszywanie się pod maszynę umożliwia podszywanie się pod maszynę, więc przeglądarka klienta i serwer znajdują się na tej samej stronie, jeśli chodzi o podszywanie się pod inną osobę. Gdy spróbujesz uzyskać dostęp do udziału sieciowego, komputer nie będzie ufać podanym personifikacjom.

Musisz włączyć delegowanie do maszyny IIS w usłudze Active Directory. Przejdź do Active Directory Users and Computers, znajdź komputer, kliknij właściwości i "Trust computer for delegation". (Może być konieczne ponowne uruchomienie usług IIS, aby działało, nie pamiętam).

Jest o wiele więcej teorii niż to, czego nie rozumiem w pełni, ale to powinno zadziałać. Niezależnie od tego, czy jest to słuszne, czy nie, ktoś może komentować!

Powód, dla którego działa na maszynie programistycznej, polega na tym, że serwer programistyczny działa jako programista, a nie (lokalnie) \ usługa sieciowa.


Przyzwoity Link:

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

Jaka jest różnica między personifikacji i delegowania?

Podszywanie się przenosi oryginalną tożsamość dzwoniącego do zasobów zaplecza na tym samym komputerze. Delegowanie przekazuje oryginalną tożsamość osoby dzwoniącej do zasobów zaplecza na komputerach innych niż komputer, na którym działa dana usługa.

Na przykład, jeśli usługa działa w usługach IIS bez podszywania się, usługa będzie uzyskiwać dostęp do zasobów przy użyciu konta ASP.NET w IIS 5.0 lub konta usługi sieciowej w usługach IIS 6.0. W przypadku podszywania się, jeśli klient łączy się przy użyciu oryginalnego konta dzwoniącego, usługa będzie uzyskiwać dostęp do zasobów takich jak baza danych SQL Server na tym samym komputerze przy użyciu oryginalnego konta dzwoniącego, a nie konta systemowego ASP.NET. Delegacja jest podobna, z tą różnicą, że baza danych SQL Server może znajdować się na innym komputerze, który jest zdalny dla usługi.

+1

To było dokładnie to, co starałem się rozgryźć. Nie zdawałem sobie sprawy, że podszywanie się nie prowadzi przez maszyny. –

+0

Człowieku, próbowałem podróbki przez kilka dni i nagle uświadomiłeś mi, że powinniśmy iść z delegacją! Wielkie dzięki –