2016-09-19 4 views
5

के साथ प्रतिरूपण सेट अप करें, मैंने एक बहुत ही सरल प्रोजेक्ट बनाया है जो दो निर्देशिकाओं में फ़ाइलों की संख्या को गिनने का प्रयास करता है। User1 को Directory2 और User2 तक पहुंचने की अनुमति नहीं है Directory1 तक पहुंचने की अनुमति नहीं है। प्रतिरूपण के कारण मुझे अपने आवेदन को कॉल करने वाले उपयोगकर्ता के आधार पर केवल एक नंबर प्राप्त करना चाहिए। दोनों उपयोगकर्ता प्रशासकों के रूप में स्थापित हैं।पहली समझ के लिए एएसपी.NET

इसलिए मैंने विजुअल स्टूडियो 2015 (विंडोज 8.1 पर चल रहे) में एक नया एमवीसी-प्रोजेक्ट बनाया है और विंडोज प्रमाणीकरण का उपयोग करने के लिए चुना है। एक बार एप्लिकेशन चालू हो रहा है और चल रहा है (आईएसएस एक्सप्रेस में), मैं अपनी मशीन पर User1 पर स्विच करता हूं (कोई सक्रिय निर्देशिका नहीं है) और वेबसाइट को इंटरनेट एक्सप्लोरर में कॉल करें (हाँ, "एकीकृत विंडोज प्रमाणीकरण" सेटिंग्स में सक्षम है)। इस सेटअप के साथ, HttpContext.User.Identity में उपयोगकर्ता User1 और WindowsIdentity.GetCurrent() मेरा विकास उपयोगकर्ता है, जिसे मैं विजुअल स्टूडियो में काम कर रहा हूं।

मैं भी मैन्युअल रूप धारण करने की कोशिश की है: "। या तो एक आवश्यक प्रतिरूपण स्तर प्रदान नहीं किया गया है, या प्रदान की प्रतिरूपण स्तर अमान्य है"

WindowsIdentity winId = (WindowsIdentity)User.Identity; 
WindowsImpersonationContext ctx = null; 
try 
{ 
    ctx = winId.Impersonate(); 

    // GetNumbers() tries to get the number of files for both directories  
    numbers = GetNumbers(); 
} 
catch (Exception e) 
{ 
} 
finally 
{ 
    if (ctx != null) 
    { 
     ctx.Undo(); 
    } 
} 

दुर्भाग्य से, मैं अपवाद कुछ लोग दावा कर रहे थे कि इसने अपनी समस्या हल की है: https://kc.mcafee.com/corporate/index?page=content&id=KB56194 मेरे लिए नहीं। मैंने User1 और मेरे स्वयं के उपयोगकर्ता को सूचियों में जोड़ा है और कंप्यूटर को पुनरारंभ किया है। कोई परिवर्तन नहीं होता है।

एकमात्र चीज जो मुझे थोड़ी सी उम्मीद देती है, एक अलग लॉगिन के साथ प्रतिरूपण है, जैसा कि https://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingusinglogonuser पर वर्णित है, नुकसान काफी स्पष्ट हैं: मुझे उपयोगकर्ता का पासवर्ड होना चाहिए और यदि उपयोगकर्ता पहले से ही लॉगिन कर रहा है तो मुझे फिर से लॉगिन क्यों करना चाहिए यह मेरे लिए किया

हालांकि यह मेरे द्वारा बड़े बदलाव के बिना एक नई परियोजना है, बस मानसिक स्वास्थ्य की जांच के लिए कुछ और जानकारी ...

मेरे Web.config

<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 

मेरे परियोजना सेटिंग्स हैं

  • "बेनामी प्रमाणीकरण" false
  • "विंडोज प्रमाणीकरण आयन "true
  • है" प्रबंधित pipline मोड "Integrated

क्या उम्मीद के रूप में इस सरल परियोजना का काम करने के लिए बदलने के लिए पर कोई सुझाव है?

सादर, कार्स्टन

उत्तर

3

मैं अंत में यह काम करने के लिए (आईआईएस एक्सप्रेस और आईआईएस) पाने में कामयाब रहे! जैसा ऊपर बताया गया है, पहला दृष्टिकोण केवल प्रोटोटाइप था। अंतिम लक्ष्य एक जीयूआई बनाना था जो सर्वर ए और एक एपीआई पर चलता है जो सर्वर बी पर चलता है। दोनों एएसपी.नेट के साथ लागू होते हैं।

<system.web> 
    <authentication mode="Windows" /> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
    <identity impersonate="true" /> 
</system.web> 

परियोजना संपत्ति "प्रबंधित pipline मोड" Classic पर सेट है (परियोजना चयन करने के बाद प्रेस F4):

जीयूआई की Web.config और एपीआई इन सेटिंग्स मिला है।

कहीं पर एसओ मैंने इस बारे में एक चर्चा देखी कि प्रतिरूपण HttpClient के साथ भी काम करना चाहिए या नहीं। यह कहा गया था, यह करता है। अच्छा, यह मेरे लिए नहीं था। और WebClient कोई मजेदार नहीं है यदि आप विभिन्न प्रकार के HTTP विधियों का उपयोग कर रहे हैं। इसलिए मैं RestSharp में स्विच:

RestClient client = new RestClient(baseUrl); 
client.Authenticator = new NtlmAuthenticator(); 
  • दृश्य स्टूडियो के लिए विशेष ध्यान दें: आप दृश्य स्टूडियो व्यवस्थापक के रूप में या फिर प्रतिरूपण आईआईएस एक्सप्रेस पर काम नहीं करेगा शुरू कर दिया है!
  • आईआईएस के लिए विशेष नोट: एप्लिकेशन पूल को Classic "प्रबंधित पाइपलाइन मोड" का उपयोग करना है।
  • विशेष नोट (परीक्षण करते समय): पहले, एपीआई ने मुझे प्रमाणित करने के लिए कहा, जिसे यह नहीं करना चाहिए। कारण काफी सरल था: मेरे विकास मशीन पर मेरे उपयोगकर्ता user1 एक और पासवर्ड फिर मेरे लक्षित मशीन पर user1 ...

मुझे आशा है कि यह किसी को मदद मिलती है था।

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