2009-01-29 16 views
10

पर एएसपी.NET वेब सेवाओं के लिए कस्टम HTTP मूल प्रमाणीकरण मैं एएसपी.NET वेब सेवा का उपयोग कर वेब सेवा इंटरफ़ेस का पर्दाफाश करने के लिए एक कार्यरत एएसपी.NET वेब अनुप्रयोग को दोबारा कर रहा हूं। Web Services authentication - best practices के अनुसार, https पर मूल Auth जाने का तरीका है। आइए मान लीजिए कि यह डब्ल्यूएस-सिक्योरिटी, एक्स 50 9, इत्यादि के विपरीत है।.NET 3.5/VS 2008

.NET 3.5/VS 2008 पर, कस्टम http मूल प्रमाणीकरण (गैर-विंडोज खाता) को लागू करने का सबसे आसान तरीका क्या है, उदाहरण के लिए, केवल तभी स्वीकार करना है जब उपयोगकर्ता का नाम "foo" है और पासवर्ड "बार" है। अंत में, मुझे Thread.CurrentPrincipal सेट चाहिए।

क्या मैं अपना खुद का HttpModule लिखता हूं या यह आसान हो सकता है?

उत्तर

5

का उपयोग कर Dominick Baier द्वारा लिखित जाने का तरीका है। As he points out परिवहन सुरक्षा पर डब्ल्यूसीएफ 3.5 के उपयोगकर्ता नामों का उपयोग आईआईएस-होस्टेड सेवा पर नहीं किया जा सकता है, हालांकि मेरा प्रश्न एएसपी.नेट वेब सेवाओं के बारे में डब्ल्यूसीएफ नहीं था।

Basic authentication in ASP.NET against custom datasourceSantosh Sahoo द्वारा HTTP मॉड्यूल का एक और कार्यान्वयन है।

हालांकि यह वही नहीं है जो मुझे चाहिए, मुझे QuickStart Tutorial's SOAP Headers sample सूचनात्मक कामकाज के लिए मिला। Http पर सादे पाठ में पासवर्ड भेजना स्पष्ट रूप से असुरक्षित है, लेकिन यह उदाहरण अधिक सुरक्षा जोड़ने के लिए बढ़ाया जा सकता है, उदाहरण के लिए https पर चल रहा है या "पासवर्ड + एक बार GUID + टाइमस्टैम्प" हैश भेज रहा है।

1

यदि आप डब्ल्यूसीएफ पर विचार कर रहे हैं, तो आप basicHttp बाइंडिंग के लिए usernameOverTransport सुरक्षा का उपयोग कर सकते हैं। यानी उपयोगकर्ता नाम और पासवर्ड क्रम के एसओएपी शीर्षलेख में रहते हैं और सभी ट्रैफिक तार पर एसएसएल एन्क्रिप्शन द्वारा संरक्षित हैं।

एक कस्टम UserNamePasswordValidator सत्यापनकर्ता का उपयोग आने वाले प्रमाण-पत्रों को प्रमाणित करने के लिए किया जा सकता है उदा। डेटाबेस।

आप सेवा व्यवहार में कस्टम IAuthorizationPolicy के भीतर थ्रेड प्रिंसिपल सेट कर सकते हैं।

उदा वर्तमान प्रिंसिपल

public bool Evaluate(EvaluationContext evaluationContext, ref object state) 
{ 
     Object obj; 
     if(evaluationContext.Properties.TryGetValue("Identities", out obj)) 
     { 
      // get the authenticated identity 
      IIdentity client = (obj as IList<IIdentity>)[0]; 
      evaluationContext.Properties["Principal"] = ... // create principal obj here for the identity 
      // this will set thread's current principal 
     } 
     return true; 
} 
+0

मैं http शीर्षलेख में उपयोगकर्ता और पासवर्ड चाहता हूं, SOAP शीर्षलेख नहीं। परिवहन पर उपयोगकर्ता नाम भी आईआईएस पर काम नहीं करता है: http://www.leastprivilege.com/WCFUsernamesOverTransportAndIISHosting.aspx –

+0

उपयोगकर्ता नाम OverTransport बुनियादी एचटीपी बाइंडिंग निश्चित रूप से आईआईएस में भी होस्ट किया जाता है, मेरे पास कुछ समय पहले उत्पादन के लिए तैनात समाधान है। ध्यान रखें कि यह मूलभूत मूल नहीं है जो आईआईएस में कॉन्फ़िगर किया गया है। यह साबुन संदेश स्तर पर है। –

3

ले लो Authorization हैडर का मूल्य निर्धारित करने के लिए IAuthorizationPolicy के लिए विधि कार्यान्वयन का मूल्यांकन करें, यह पार्स और उपयोगकर्ता नाम/पासवर्ड को मान्य।

मान उपयोगकर्ता नाम: पासवर्ड, बेस 64 स्ट्रिंग के रूप में एन्कोड किया गया है।

विवरण के लिए http://en.wikipedia.org/wiki/Basic_access_authentication देखें।

संपादित: यदि आप इस हर अनुरोध के लिए किया, कस्टम प्रमाणन योजना का उपयोग कर चाहते हैं, तो यह आसान हो शीर्षलेख पार्स और धागे के प्रमुख की स्थापना को संभालने के लिए एक HttpModule लिखने के लिए होगा।

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