2012-10-25 25 views
25

मैं एक सुरक्षित (एसएसएल) सार्वजनिक सेवा बना रहा हूं जहां उपयोगकर्ता प्रमाण-पत्र सक्रिय निर्देशिका में रहते हैं। मैं सर्विसस्टैक के प्रमाणीकरण का लाभ उठाना चाहता हूं और wiki article पर पढ़ा है। मेरे पास पहले से ही एडी के साथ उपयोगकर्ता प्रमाण-पत्र सत्यापित करने के लिए लिखा गया कोड है। मेरे कुछ प्रश्न हैं।सक्रिय निर्देशिका/विंडोज प्रमाणीकरण के साथ Servicestack प्रमाणीकरण का उपयोग कैसे करें?

  1. मैं किस ऑथ प्रदाता का उपयोग करता हूं? प्रमाण पत्र, मूल लेख या कस्टम? सेवा को एसएसएल की आवश्यकता है ताकि मूल ऑथ सुरक्षित रहे, हालांकि पासवर्ड को अतिरिक्त सुरक्षा के लिए एन्क्रिप्ट किया जाएगा।
  2. क्या मुझे अभी भी UserAuth को स्टोर करने और AuthUserSession को कैश करने की आवश्यकता है?
  3. क्या मोनोचच क्लाइंट प्रमाणीकरण का समर्थन करेगा?

अद्यतन 2: मैंने प्रमाण पत्र AuthProvider का उपयोग करके एडी के साथ एकीकृत एक परीक्षण एसएस सेवा बनाने का अंत किया। हालांकि मेरे अंतिम लक्ष्य में 1 साइट है जो ग्राहकों द्वारा बुलाए जाने पर एक एपीआई है। तो मूल रूप से एक एसएस एमवीसी साइट।

अद्यतन:

यह कुछ और अधिक शोध है कि एस एस एक वाणिज्यिक उत्पाद है कि भविष्य में विंडोज प्रमाणीकरण का समर्थन कर सकते कर विचार कर रहा है करने के बाद मेरी समझ है। मैंने इसे एसएस Google समूह पर मिथज़ से एक टिप्पणी में पढ़ा। इस एसओ सवाल से पूछने का कारण यह है कि मेरी कंपनी आईडब्ल्यूए का उपयोग करके आंतरिक अनुप्रयोग बनाती है और आईएसए के बिना एसएस एमवीसी को अपनाना मुश्किल है। मुझे लगता है कि मैंने पढ़ा है कि आप एसएस एमवीसी साइट को एएसपी.NET साइट से होस्ट कर सकते हैं जो आईडब्ल्यूए का उपयोग करता है लेकिन मैंने अभी तक कोशिश नहीं की है।

+0

मैंने ट्विटर पर डेमिस बेलोट के साथ बात की और एक समान प्रतिक्रिया मिली। '@ChaseFlorell मैंने जो कुछ जांच नहीं की है, अब Win/Active Directory में काम न करें। समस्या को ढूंढने/हल करने के लिए कुछ आर एंड डी की आवश्यकता है ... आपको नीचे दिए गए उत्तर के रूप में जो कहा है उसे लिखना चाहिए। –

उत्तर

5

मैं भी एकीकृत Windows प्रमाणीकरण (एक कंपनी के आवेदन के लिए) के साथ ServiceStack को झुका दिया है, और कुंजी ServiceStack के AuthProviders साथ यह पूरी तरह से एकीकृत करने की कोशिश छोड़, क्योंकि IWA के सामान्य दृष्टिकोण सौदा नहीं करता था आपके आवेदन कोड में प्रमाण-पत्र के साथ - यह वेब सर्वर द्वारा संभाला जाता है। मैंने जो किया था:

  1. आईआईएस में साइट/एप्लिकेशन कॉन्फ़िगर करें ताकि विंडोज प्रमाणीकरण एकमात्र सक्षम विकल्प था। (कोई बेनामी पहुंच की अनुमति नहीं है।) इसका मतलब है कि आईआईएस स्वयं अनधिकृत उपयोगकर्ताओं के साथ चुनौती-प्रतिक्रिया (HTTP 401/200) अनुक्रम का ख्याल रखेगा, और आपके लिए प्रक्रिया के प्रमाणीकरण हिस्से को संभालता है।

  2. एक विशेषता के रूप में ServiceStack के IHasRequestFilter (एक HTTP प्री-अनुरोध फ़िल्टर) को कार्यान्वित करें (उदा।, [AdminOnly])। इस फ़िल्टर की RequestFilter विधि वर्तमान उपयोगकर्ता नाम HttpContext (HttpContext.User.Identity.Name) से प्राप्त करती है, इसे एक भंडार (जो SQL डेटाबेस, फ्लैट फ़ाइल इत्यादि हो सकती है) से देखती है, कैश परिणाम सर्विसस्टैक के ICacheClient (मेमोरी कैश, रेडिस इत्यादि) का उपयोग करके परिणाम देता है, और अनधिकृत होने पर 403 एचटीपीईआरर फेंकता है।

इस के साथ

किया, जो कुछ जरूरी हो गया था वर्ग या तरीकों जहां वांछित करने के लिए विशेषता (जो सेवा पाइपलाइन जहां वांछित में इस प्रमाणीकरण/प्राधिकरण हो जाता है) जोड़ने के लिए, और मेरे AppHost में मेरी वांछित कैश प्रदाता रजिस्टर करने के लिए था कार्यान्वयन, उदाहरण:

container.Register<ICacheClient>(new MemoryCacheClient() { FlushOnDispose = false }); 

यह खूबसूरती से काम करता है।

+0

उत्तर के लिए धन्यवाद। मैं एक बार इसका प्रयास करूँगा। – BrandonG

5

डेमिस बेलोट ने twitter पर क्या कहा है। शायद संभव है लेकिन अधिक शोध की जरूरत है।

मैंने कुछ भी जांच नहीं की है, Win/Active निर्देशिका में अब काम नहीं करें। समस्या डी को हल करने/हल करने के लिए

मुझे अंततः एडी के साथ काम करने वाली प्रोटोटाइप सेवा मिल गई। मैंने प्रमाण पत्र AuthProvider लागू किया। अब यह एएसपी.नेट आईडब्ल्यूए से बिल्कुल जुड़ा हुआ नहीं है, लेकिन आसानी से यह देखने के लिए जांच करता है कि उपयोगकर्ता एडी में है या नहीं। उम्मीद है कि यह किसी की मदद कर सकता है।

public class LDAPAuthProvider : CredentialsAuthProvider 
{ 
    public override bool TryAuthenticate(IServiceBase authService, string userName, string password) 
        { 
         //Check to see if the username/password combo is valid, an exception will be thrown if the username or password is wrong 
         try 
         { 
          DirectoryEntry entry = new DirectoryEntry(ConfigurationManager.AppSettings["TargetOU"], userName, password); 
          object nativeObject = entry.NativeObject; 
         } 
         catch (Exception) 
         { 
          //This means the username/password combo failed 
          return false; 
         } 

         return true; 
        } 
} 
+0

मैं जितना अधिक जानकारी जोड़ सकता हूं उतना ही आप इस जवाब में कर सकते हैं। उपर्युक्त "अपडेट" से कुछ जानकारी शामिल करें, और हो सकता है कि आपने 'CredentialsAuthProvider' का उपयोग कैसे किया है, इस पर कुछ कोड शामिल करें। –

+0

मुझे लगता है कि फॉर्म प्रमाणीकरण का उपयोग करना एक अच्छा समझौता होगा। IWA सेटअप करने में आसान होता है और उपयोगकर्ता के लिए कोई सेटअप की आवश्यकता नहीं होती है, लेकिन IE के नए संस्करणों के साथ, आपको साइट को अपनी विश्वसनीय साइटों में जोड़ना होगा और फिर सुरक्षा को संपादित करना होगा ताकि उपयोगकर्ता प्रमाण-पत्रों को पारित किया जा सके। आप प्रपत्र प्रमाणीकरण को कार्यान्वित कर सकते हैं और यदि कोई ग्राहक यूआरएल पर जाता है, तो आप उनके क्रेडेंशियल प्रमाणीकरण कर सकते हैं और अभी भी फॉर्म प्रमाणीकरण.SetAuthCookie() का उपयोग कर कुकी को सहेज सकते हैं। – BrandonG

+0

यह SO प्रश्न बहुत मददगार होगा: http://stackoverflow.com/questions/15068774/use-asp-net-authentication-with-servicestack – BrandonG