2010-04-09 22 views
13

Farklı bir kullanıcının güvenlik bağlamında bir iş parçacığı nasıl başlatılır? Bir süreç normal olarak bir iş parçacığı başlattığında, güvenlik içeriği de iletilir, ancak farklı bir kullanıcının yöneticisi ile farklı bir güvenlik bağlamında bir iş parçacığı nasıl başlatılır?Farklı bir güvenlik bağlamında bir iş parçacığı nasıl başlatırım?

+0

İlgili [post] (https://stackoverflow.com/a/7250145/465053) - Bir uygulamayı çalıştırırken bir kod parçasını çalıştırmak için AD hesabının kimliğine bürünme nasıl yapılır? – RBT

cevap

4

CurrentPrincipal, iş parçacığı başladıktan sonra iş parçacığı kodunun ilk işleyişini ayarlayabileceğinizi ve sonra yalnızca başka bir ilkeyle çalıştırılması gereken kodu çalıştırmaya başlayabileceğinizi düşünüyorum.

Bu, herhangi bir .NET rol tabanlı denetime dikkat etmelidir. İşletim sistemine yapılan çağrılar için kimliğe bürünme gereksinimi duyarsanız, WindowsIdentity'un kimliğine bürünebilirsiniz.

Kodu (veya çalışmıyor olabilir - bunu test vermedi):

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

Geçecek bir kod snippet'i güzel olurdu. ExecutionContext akışının da bastırılması gerektiğini düşünüyorum. – TrustyCoder

+1

Neden "ExecutionContext" akışı engellenmeli? Kimliğe bürünme özelliğini kullanırken (burada yaptığım gibi), "ExecutionContext" ın SecurityContext'i güncelleştirilir (Reflector ile kontrol edilir, bu MS uygulamasında dahili "UpdateThreadWI" yönteminde olur). Soru sorumlusu için – Lucero

+2

mu yaptı? –

1

Ben başarı ile kimliğine bürünen teknikleri like this kullandık.

bir programlama bağlamında "bürünme" altında başlangıçta kullanıcı bağlamında, yani bir uygulama, başlatan kullanıcının başka bir kullanıcı içerik kodunu yürüten bir tekniğini belirtmektedir

geçici kez değiştirilen veya bir uygulamanın çalıştırılması sırasında birden çok kez.

bu etmektir yapmanın nedeni bir uygulamanın geçerli kullanıcı bağlam yapmak yasaktır olduğu görevleri yerine getirir. Tabii ki bir uygulama fazla ayrıcalık infaz kullanıcıya vermek, ancak genellikle kötü bir fikir (nedeniyle güvenlik kısıtlamaları) veya imkansız (örn Eğer bir makineye tam yönetici erişimi yoksa böyle yap).

İlgili konular