2010-04-09 17 views
13

किसी भिन्न उपयोगकर्ता के सुरक्षा संदर्भ में धागा कैसे प्रारंभ करें? जब कोई प्रक्रिया सामान्य रूप से थ्रेड शुरू करती है तो सुरक्षा संदर्भ भी पारित किया जाता है लेकिन एक अलग उपयोगकर्ता के प्रिंसिपल के साथ एक अलग सुरक्षा संदर्भ में थ्रेड कैसे लॉन्च किया जाए?मैं एक अलग सुरक्षा संदर्भ में धागा कैसे शुरू करूं?

+0

संबंधित [पोस्ट] (https://stackoverflow.com/a/7250145/465053) - एप्लिकेशन चलाने के दौरान कोड का एक टुकड़ा चलाने के लिए किसी एडी खाते का प्रतिरूपण कैसे करें? – RBT

उत्तर

4

मेरा मानना ​​है कि आप थ्रेड शुरू होने के बाद थ्रेड कोड के पहले ऑपरेशन के रूप में CurrentPrincipal सेट कर सकते हैं, और उसके बाद केवल दूसरे प्रिंसिपल के साथ चलने वाले कोड को निष्पादित करना शुरू कर सकते हैं।

यह किसी भी .NET भूमिका-आधारित चेक का ख्याल रखना चाहिए। यदि आपको ओएस को कॉल के लिए प्रतिरूपण की आवश्यकता है, तो आप WindowsIdentity का प्रतिरूपण कर सकते हैं।

संहिता (या काम नहीं हो सकता है - यह परीक्षण नहीं किया है):

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

साथ एक कोड स्निपेट अच्छा होगा। मुझे लगता है कि ExecutionContext प्रवाह भी दबाया जाना चाहिए। – TrustyCoder

+1

'ExecutionContext' प्रवाह को दबाया जाना चाहिए क्यों? प्रतिरूपण का उपयोग करते समय (जैसा कि मैंने इसे यहां किया है), 'निष्पादन कॉन्टेक्स्ट'' का 'सुरक्षा कॉन्टेक्स्ट' अपडेट किया गया है (प्रतिबिंबक के साथ चेक किया गया है, यह एमएस कार्यान्वयन में आंतरिक 'अपडेट थ्रेड वाईआई' विधि में होता है)। – Lucero

+2

क्या प्रश्न पूछने वाले के लिए यह काम किया? –

1

मैं सफलता के साथ प्रतिरूपण के लिए तकनीक like this इस्तेमाल किया है।

शब्द "प्रतिरूपण" एक प्रोग्रामिंग संदर्भ में एक तकनीक है कि के तहत उपयोगकर्ता के लिए जो मूल रूप से एक आवेदन पत्र, उपयोगकर्ता प्रसंग यानी शुरू कर दिया की तुलना में किसी अन्य उपयोगकर्ता संदर्भ कोड निष्पादित करता है को संदर्भित करता है अस्थायी रूप से एक बार बदला है या के दौरान एक आवेदन के निष्पादन के दौरान कई बार।

ऐसा करने का कारण कार्य करता है जो वर्तमान उपयोगकर्ता किसी अनुप्रयोग का संदर्भ करने की अनुमति नहीं है। बेशक आप उपयोगकर्ता एक आवेदन अधिक विशेषाधिकार को क्रियान्वित करने अनुदान सकता है, लेकिन आम तौर पर इस एक बुरा विचार (कारण सुरक्षा प्रतिबंधों) या है असंभव (जैसे आप के लिए एक मशीन के लिए पूर्ण प्रशासनिक पहुँच नहीं है अगर ऐसा करो)।

संबंधित मुद्दे