2011-07-29 9 views
14

मैंने उपयोगकर्ता को सफलतापूर्वक प्रतिरूपण करने में कामयाब रहा है। LogonUser इंटरऑप का उपयोग करना, उदा।एएसपी.नेट ने मेरे अधिकार का सम्मान करने से इंकार कर दिया।

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

यह ठीक काम करता है। जब मैं अपनी तत्काल खिड़की पर जाता हूं और WindowsIdentity.GetCurrent().Name दर्ज करता हूं, प्रतिरूपित उपयोगकर्ता मेरे CurrentUser के रूप में दिखाता है। जब मैं इस उपयोगकर्ता को रिलीज करता हूं, तो यह मेरे असली उपयोगकर्ता पर वापस जाता है। यहां कोई समस्या नहीं है - मैं पूर्वाह्न प्रतिरूपण कर रहा हूं।

हालांकि, जब मैं उपयोगकर्ता की पहुंच है कि एक साझा करने के लिए एक फ़ाइल में लिखने का प्रयास करते हैं, मैं:

Access to the path [path name] denied.

मैं मैन्युअल रूप से विंडोज़ में लॉग इन करने में सक्षम हूं क्योंकि उपयोगकर्ता मैं प्रतिरूपण कर रहा हूं, नेविगेट किया है, और साझा करने के लिए एक फाइल लिखी है। उपयोगकर्ता को निश्चित रूप से उस निर्देशिका में व्यवस्थापकीय निजीकरण है जो मैं लक्षित कर रहा हूं।

मैं अंतिम उपयोगकर्ता को फ़ाइल अपलोड करने की अनुमति दे रहा हूं, और HttpPostedFileBase ऑब्जेक्ट का उपयोग करके, इस शेयर में एक फ़ाइल लिखें। अनिवार्य रूप से, मैं फ़ाइल अपलोड करने के लिए कोड के ब्लॉक में प्रतिरूपण प्रतिबंधित कर रहा हूं। एक बार यह समाप्त होने के बाद, यह मूल प्रमाणीकृत एलडीएपी उपयोगकर्ता पर वापस जाता है उदा।

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

पथ सही है।

जब मैं SaveAs विधि का उपयोग कर फ़ाइल को सहेजता हूं, तो क्या यह मेरे प्रतिरूपण का सम्मान करता है?

क्या यह किसी अन्य खाते के तहत फ़ाइल लिखने का प्रयास कर रहा है, मुझे पता नहीं है? और यदि हां, तो मैं इसे कैसे बदल सकता हूं?

SaveAs विधि का उपयोग कर पूरे नियंत्रण में प्रतीत नहीं होता है - एक एकल ओवरलोड नहीं। क्या इस ऑब्जेक्ट का उपयोग करने के लिए कोई और विकल्प है जो मुझे मेरे प्रमाण-पत्रों पर अधिक नियंत्रण देगा?

+8

आपने लेखक को गलत लिखा है! ;) –

+1

क्या आपने लक्ष्य मशीन के इवेंट लॉग में देखा है कि क्या कोई पहुंच अस्वीकार या लॉगिन त्रुटियां थीं? – NotMe

+0

क्या आपने नीचे सुझाए गए डबल-हॉप की जांच की थी? – ironsam

उत्तर

3

यह डबल-हॉप प्रमाणीकरण समस्या की तरह लगता है। क्या आपने नेटवर्क शेयर को अपनी साइट के डिफ़ॉल्ट आईआईएस उपयोगकर्ता (उदा। एएसपीएनईटी) तक पहुंच संशोधित करने और प्रतिरूपण कोड के बिना POST/SaveA को चलाने की कोशिश की है? यदि यह विफल रहता है, तो आपको यह देखना चाहिए कि आईआईएस में चीजें सेट की गई हैं जो सर्वर हॉप प्रमाणीकरण समस्याओं का कारण बन सकती है।

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

+0

मुझे डबल-हॉप की तरह लगता है, जब आपका ऐप रिमोट मशीन तक पहुंचने का प्रयास कर रहा है, तो शायद यह आपके ऐपपूल को असाइन किए गए खाते का उपयोग कर रहा है। रिमोट एक्सेस के लिए इस्तेमाल किए गए खाते की पुष्टि करने के लिए असफल लॉगिन के लिए रिमोट मशीन पर लॉग देखें। – Zachary

+0

+1 - मैंने पहले इस मुद्दे को देखा है और यह डबल-हॉप के कारण था। – Fenton

0

आप कहते हैं "इस शेयर में एक फाइल लिखें।" कंप्यूटर पर फ़ोल्डर के लिए शेयर के लिए अलग अनुमतियां हैं। क्या आपने शेयर अनुमतियां जांच ली हैं?

+0

मैंने उपयोगकर्ता के रूप में लॉग इन किया, विंडोज़ में सामान्य उपयोगकर्ता प्रमाणीकरण के माध्यम से, साझा करने के लिए नेविगेट किया, और लिखने में सक्षम था। उसी मशीन के रूप में मैं कोड चला रहा हूं, जो शेयर तक पहुंचने का प्रयास कर रहा है। –

0

अपने LogonSessionType मूल्य समायोजित करने का प्रयास: यहाँ शुरू करने के लिए एक अच्छी जगह हो सकती है। मुझे लगता है कि नेटवर्क शेयर में सहेजने के लिए, आपको इसे "नेटवर्क" के रूप में रखना होगा, जबकि डिफ़ॉल्ट "इंटरेक्टिव" है।

अधिक जानकारी: How To: Use Impersonation and Delegation in ASP.NET 2.0

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

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