2012-04-05 12 views
6

के लिए एक कस्टम http शीर्षलेख का उपयोग करने के लिए प्रपत्र प्रमाणीकरण बढ़ाएं मेरे पास एक wcf webhttp सेवा है जो उपयोगकर्ताओं को प्रमाणीकृत करने के लिए प्रपत्र प्रमाणीकरण का उपयोग करती है। यह टिकट ठीक काम करता है अगर टिकट कुकी संग्रह में या यूआरएल में आता है।टिकट

लेकिन अब मैं एक कस्टम http शीर्षलेख में फॉर्म ऑथ टिकट की स्ट्रिंग भेजना चाहता हूं और कुकी के बजाय हेडर की जांच करने के लिए फॉर्म ऑथ मॉड्यूल को बदलना चाहता हूं।

मुझे लगता है कि इसे प्राप्त करने के लिए फॉर्म को बढ़ाने के लिए आसान होना चाहिए, लेकिन इसका कोई संसाधन नहीं मिला। क्या मुझे आपसे सही दिशा निर्देशन मिलेगा ?

यहाँ कैसे मेरे प्रमाणीकरण प्रवाह काम करेगा है,

  1. एक ग्राहक एन्क्रिप्टेड टिकट स्ट्रिंग रिटर्न उपयोगकर्ता नाम के साथ प्रमाणित विधि और लोक निर्माण विभाग
  2. सेवा कॉल
  3. ग्राहक एक http में प्राप्त टिकट स्ट्रिंग भेज प्रत्येक बाद के अनुरोध के साथ शीर्षलेख
  4. ऑथ हेडर के लिए सेवा जांच करता है और ऑथ टिकट
+0

आप decompiling फार्म प्रमाणीकरण मॉड्यूल की कोशिश की है: संलग्न टिकट (4) के साथ

 var formsTicket = new FormsAuthenticationTicket( 1, login, DateTime.Now, DateTime.Now.AddYears(1), persistent, String.Empty); var encryptedFormsTicket = FormsAuthentication.Encrypt(formsTicket); //return encryptedFormsTicket string to client 

सेवा कॉल? आपको इसे उपclass करने और इसके कुछ तरीकों को ओवरराइड करने में सक्षम होना चाहिए। या शायद आप पूरी तरह से लिख सकते हैं – cecilphillip

+0

आप एक मानक कुकी हेडर के बजाय कस्टम हेडर में टिकट क्यों भेजना चाहते हैं? –

+0

कोज़ यह एक एपीआई परिदृश्य में अच्छा दिखता है। कुकीज भेजना एपीआई – Amila

उत्तर

3

फॉर्म प्रमाणीकरण मॉड्यूल विस्तार योग्य नहीं है, लेकिन आप अपना खुद का प्रमाणीकरण लिख सकते हैं। यह बहुत सरल है:

प्रमाणीकरण (2):


var ticket = FormsAuthentication.Decrypt(encryptedFormsTicket) 
//extract authentication info from ticket: ticket.Name 
+0

मैंने वास्तव में यह तरीका किया और ठीक काम करता है ... – Amila

1

मुझे यकीन नहीं है कि यह जाने का तरीका है (लालित्य-वार), लेकिन एप्लिकेशन BeginRequest के लिए global.asax.cs में कोई ईवेंट जोड़ने और शीर्षलेख से स्ट्रिंग लेना और कुकी को इंजेक्ट करना स्वयं अनुरोध (फॉर्म प्रमाणीकरण तब इसे उठा लेना चाहिए)।

कुछ की तरह:


protected void Application_BeginRequest() 
{ 
    // Your code here to read request header into cookieText variable 
    string cookieText = ReadCookieFromHeader(); 

    var cookieData = FormsAuthentication.Decrypt(cookieText); 

    if (!cookieData.Expired) 
    { 
     HttpContext.Current.Request.Cookies.Add(new HttpCookie(cookieData.Name, cookieText)); 
    } 
} 

अस्वीकरण: कृपया ध्यान दें कि मैं यह परीक्षण नहीं किया, सिर्फ एक संभव दृष्टिकोण अपना रास्ता फेंक!

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