2011-07-29 20 views
14

Udało mi się skutecznie podszyć się pod użytkownika. Używanie LogonUser Interop, np.ASP.NET odmawia uszanowania mojego autorytetu.

[DllImport("advapi32.dll", SetLastError = true)] 
    static extern bool LogonUser(
     string principal, 
     string authority, 
     string password, 
     LogonSessionType logonType, 
     LogonProvider logonProvider, 
     out IntPtr token); 

To działa dobrze. Kiedy wchodzę do mojego bezpośredniego okna i wpisuję WindowsIdentity.GetCurrent().Name, podszywany użytkownik pokazuje się jako mój CurrentUser. Kiedy zwalniam tego użytkownika, wraca on do mojego prawdziwego użytkownika. Tutaj nie ma problemów - podszywanie się pod am.

Jednak gdy próbuję zapisać plik do udziału, że użytkownik ma dostęp do otrzymuję:

Access to the path [path name] denied..

Byłem w stanie ręcznie zalogować się do systemu Windows jako użytkownik podszywający się, nawigowałem i zapisałem plik do udziału. Użytkownik definitywnie ma dostęp administracyjny do katalogu, który wybieram.

Pozwalam użytkownikowi końcowemu na przesłanie pliku, a przy użyciu obiektu HttpPostedFileBase napisz plik do tego udziału. Zasadniczo ograniczam podszywanie się do bloku kodu, aby przesłać plik. Po zakończeniu wraca do pierwotnego uwierzytelnionego użytkownika LDAP, np.

imp = Impersonation.ImpersonateUser("someuser","somepassword"); 
HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 
... 
hpf.SaveAs(path); 
Impersonation.StopImpersonating(imp); 

Ścieżka jest poprawna.

Kiedy zapisuję plik przy użyciu metody SaveAs, czy respektuje on moje podszywanie się?

Czy próbujesz zapisać plik pod innym kontem, którego nie znam? A jeśli tak, jak mogę to zmienić?

Wygląda na to, że nie ma zbyt dużej kontroli przy użyciu metody SaveAs - ani jednego przeciążenia. Czy istnieją inne alternatywy dla używania tego obiektu, co dałoby mi większą kontrolę nad moimi referencjami?

+8

Podałeś błędny autorytet! ;) –

+1

Czy przejrzałeś dziennik zdarzeń komputera docelowego, aby sprawdzić, czy nie było odmowy dostępu lub błędy logowania? – NotMe

+0

Czy zbadałeś podwójny hop, jak sugerowałem poniżej? – ironsam

Odpowiedz

3

To brzmi jak problem z uwierzytelnianiem podwójnym hopem. Czy próbowałeś przyznać udział sieciowy zmienić dostęp do domyślnego użytkownika IIS witryny (np. ASPNET) i uruchomić POST/SaveAs bez kodu podszywania się w ogóle? Jeśli to się nie powiedzie, powinieneś sprawdzić, czy rzeczy są skonfigurowane w IIS, które mogą prowadzić do problemów z uwierzytelnianiem przeskoku serwera. Tutaj może być dobrym miejscem do rozpoczęcia:

http://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx

+0

Dla mnie, gdy twoja aplikacja próbuje uzyskać dostęp do zdalnego komputera, prawdopodobnie używa konta przypisanego do twojego AppPool. Przejrzyj dzienniki na komputerze zdalnym, aby nieudane logować się, aby potwierdzić konto używane do zdalnego dostępu. – Zachary

+0

+1 - Widziałem już ten problem wcześniej i było to spowodowane podwójnym skokiem. – Fenton

0

Mówisz "napisz plik do tego udziału". Istnieją oddzielne uprawnienia dla udziału niż te, które znajdują się w folderze na komputerze. Czy sprawdziłeś uprawnienia do udziałów?

+0

Zalogowałem się jako użytkownik, poprzez normalne uwierzytelnianie użytkownika w oknach, nawigowałem do udziału i byłem w stanie napisać. Ta sama maszyna, na której uruchamiam kod, który próbuje uzyskać dostęp do udziału, od. –

Powiązane problemy