2010-04-09 12 views
13

Jak rozpocząć wątek w kontekście bezpieczeństwa innego użytkownika? Kiedy proces rozpoczyna wątek normalnie, kontekst zabezpieczeń jest również przekazywany, ale jak uruchomić wątek w innym kontekście zabezpieczeń z dyrektorem innego użytkownika?Jak uruchomić wątek w innym kontekście zabezpieczeń?

+0

Powiązane [post] (https://stackoverflow.com/a/7250145/465053) - Jak podszyć się pod konto AD, aby uruchomić fragment kodu podczas uruchamiania aplikacji? – RBT

Odpowiedz

4

Wierzę, że można ustawić CurrentPrincipal jako pierwszą operację kodu wątku po rozpoczęciu wątku, a dopiero potem rozpocząć wykonywanie kodu, który ma działać z drugą wartością główną.

To powinno obsłużyć wszystkie kontrole oparte na rolach .NET. Jeśli potrzebujesz podszywania się pod połączenia do systemu operacyjnego, możesz podszyć się pod numer WindowsIdentity.

Code (może lub nie może pracować - nie testowałem go):

public void Run(object principalObj) { 
    if (principalObj == null) { 
     throw new ArgumentNullException("principalObj"); 
    } 
    IPrincipal principal = (IPrincipal)principalObj; 
    Thread.CurrentPrincipal = principal; 
    WindowsIdentity identity = principal.Identity as WindowsIdentity; 
    WindowsImpersonationContext impersonationContext = null; 
    if (identity != null) { 
     impersonationContext = identity.Impersonate(); 
    } 
    try { 
     // your code here 
    } finally { 
     if (impersonationContext != null) { 
      impersonationContext.Undo(); 
     } 
    } 
} 

... 

Thread thread = new Thread(Run); 
thread.Start(yourPrincipal); 
+1

Fragment kodu na stronie byłby miły. Myślę, że przepływ ExecutionContext powinien być również wyłączony. – TrustyCoder

+1

Dlaczego przepływ "ExecutionContext" powinien być wyłączony? Podczas korzystania z podszywania się (tak jak to zrobiłem tutaj), "SecurityContext" z 'ExecutionContext' jest aktualizowany (sprawdzany za pomocą Reflectora, dzieje się to w wewnętrznej metodzie' UpdateThreadWI' w implementacji MS). – Lucero

+2

wykonałeś to zadanie dla pytającego pytającego? –

1

mam stosowanych technik like this do podszywania się z sukcesu.

Określenie „personifikacji” w kontekście programowania odnosi się do techniki, która wykonuje kod pod inny kontekst użytkownika niż użytkownik, który pierwotnie rozpoczął aplikację, tj kontekście użytkownika jest tymczasowo zmieniane raz lub wiele razy podczas wykonywania aplikacji.

Powodem wykonania tej czynności jest wykonanie zadania, które nie jest dozwolone dla bieżącego użytkownika, o którym mowa w bieżącym użytkowniku. . Oczywiście można przyznać użytkownikowi Wykonywanie aplikacyjnych kolejne przywileje, ale zazwyczaj jest to zły pomysł (ze względu na ograniczenia bezpieczeństwa) lub niemożliwe (np jeśli nie mają pełny dostęp administracyjny do maszynie do Zrób tak).

Powiązane problemy