2010-03-23 9 views
11

पृष्ठभूमि: मैं (जेड :) नेटवर्क डिस्क पर फ़ाइलों से पढ़नेनेटवर्क डिस्क पर एक फ़ाइल को एक्सेस करना

यह मेरे कार्यालय डोमेन महान काम करता है कि एक आवेदन पत्र है, लेकिन यह पर काम नहीं करता साइट (एक अलग डोमेन में)। जहां तक ​​मैं डोमेन उपयोगकर्ताओं और नेटवर्क ड्राइव को बता सकता हूं, वैसे ही, मेरे पास ग्राहक डोमेन में उपयोगकर्ताओं आदि तक पहुंच नहीं है।

जब मैं नेटवर्क ड्राइव तक नहीं पहुंच पाया तो मुझे लगा कि मुझे उपयोगकर्ता के लिए टोकन की आवश्यकता है।

[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); 

...

const string userName = "USER"; 
const string pass = "PASS"; 
const string domainName = "VALIDDOMAIN.local" //tried with valid domain name and with null, same result 
const int LOGON32_PROVIDER_DEFAULT = 0; 
const int LOGON32_LOGON_INTERACTIVE = 2; 

IntPtr tokenHandle = new IntPtr(0); 

bool returnValue = LogonUser(userName, domainName, pass, 
      LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
      ref tokenHandle); 

if (!returnValue) 
    throw new Exception("Logon failed."); 

WindowsImpersonationContext impersonatedUser = null; 
try 
{ 
    WindowsIdentity wid = new WindowsIdentity(tokenHandle); 
    impersonatedUser = wid.Impersonate(); 

} 
finally 
{ 
    if (impersonatedUser != null) impersonatedUser.Undo(); 
} 

अब यहाँ दिलचस्प/अजीब हिस्सा है: यह कैसे मैं उपयोगकर्ता impersionate है। मेरे नेटवर्क में एप्लिकेशन पहले से ही नेटवर्क ड्राइव तक पहुंच सकता है, और यदि मैं सक्रिय उपयोगकर्ता का प्रतिरूपण करने का प्रयास करता हूं (एक ही डोमेन सहित एक ही उपयोगकर्ता), तो यह नेटवर्क ड्राइव तक पहुंचने में सक्षम नहीं होगा।

यह मुझे असहाय छोड़ देता है क्योंकि अब मुझे नहीं पता कि क्या काम करता है और क्या नहीं, और इस बिंदु पर, क्या यह साइट पर काम करेगा?

मुझे क्या याद आ रही है?

संपादित करें: के रूप में मैं बिना होगा मैं मान्य डोमेन नाम में प्रवेश की कोशिश की है और यह काम नहीं किया है, ताकि बाद मैं अशक्त डालने का प्रयास किया एक ही उपयोगकर्ता नाम पाने के लिए: मैं इस जबकि मूल रूप से सवाल पूछने लिखना भूल यह कोड (चूंकि यह हमारे डोमेन में डिफ़ॉल्ट रूप से काम करता है)। इससे मदद नहीं मिली, और इस तरह डोमेन = शून्य; इस सवाल में समाप्त हो गया।

+3

मुझे लगता है कि सुपरसियर लोग रिवर्स पर बहस करेंगे (क्योंकि इसमें कोड है)। – Codesleuth

+0

आप इस कोड को निष्पादित करने वाले खाते को ड्राइव तक पहुंच पढ़ने के लिए क्यों नहीं देते? फिर आपका कोड यह हो जाता है: 'File.ReadAllBytes (filePath); ' – ChaosPandion

+0

मैंने एक बार एक ही प्रश्न पूछा; आप इसे उपयोगी पा सकते हैं: http://stackoverflow.com/questions/659013/accessing-a-shared-file-unc-from-a-remote-non-trusted-domain-with-credentials – Randolpho

उत्तर

6

कुछ विचार:

  • कोड से नेटवर्क संसाधनों तक पहुंच के लिए तार्किक ड्राइव रास्तों का प्रयोग न करें। हमेशा यूएनसी पथ का उपयोग करें (उदा। \\SERVER\Share\Filename.ext)। ताकि जब आप का रूप धारण विधि कॉल, आप विस्तार से विफलता/सफलता को ट्रैक कर सकते हैं
  • अपने स्थानीय सुरक्षा नीति से लॉगऑन/लॉगऑफ़ घटनाओं की ऑडिटिंग सक्षम
  • आप सबसे अच्छा होगा अपने खुद के डोमेन में खाता खोलने के लिए होता है कि दूसरे डोमेन में एक खाता के रूप में एक ही उपयोगकर्ता नाम और पासवर्ड है। अपने डोमेन को प्रमाणित करें और पास-थ्रू प्रमाणीकरण आपको अन्य डोमेन पर नेटवर्क शेयर तक पहुंच प्रदान करेगा।
+0

यूएनसी पथ का परीक्षण करेगा। हालांकि मुझे लगता है कि आप मुझे डोमेन के बारे में गलत समझते हैं। परीक्षण वातावरण में दो अलग-अलग डोमेन हैं और एक ऐसी साइट पर है जो कभी एक-दूसरे से संवाद नहीं करती है। दोनों तरफ उपयोगकर्ता उपयोगकर्ता डोमेन में है कि वह एक्सेस करने का प्रयास कर रहा है। –

+0

इसके अलावा, मुझे 100% यकीन नहीं है कि मेरे पास यूएनसी पथ होगा - ग्राहक सिस्टम प्रशासकों ने एक डोमेन उपयोगकर्ता स्थापित किया है, इसलिए मेरे पास मैप किए गए नेटवर्क ड्राइव हो सकते हैं। क्या मैं अभी भी यूएनसी तक पहुंच सकता हूं? –

0

यह बेवकूफ लग सकता है लेकिन क्या आपने ड्राइव तक पहुंचने के तरीके को बदलने का प्रयास किया है? शायद वर्चुअल हैंडलर के कुछ रूप स्थापित करें जो आपको ड्राइव पर जानकारी देखने देता है। उदाहरण के लिए एसएसएच?

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