2011-03-01 9 views
8

हमारे पास एक छोटा सा एप्लीकेशन है जिसे हमने हमारे खाली समय में नवीनतम एमवीसी 3 और एंटिटी फ्रेमवर्क .नेट पुस्तकालयों का उपयोग करके उस समय उपलब्ध कराया था, और इसे तैनात किया था। प्रबंधन ने इसे पसंद किया, और वे इसे एक भारी विरासत में एकीकृत करना चाहते हैं। नेट 3.5 वेब फॉर्म एप्लिकेशन।मैं वेब फॉर्म और एमवीसी 2 अनुप्रयोगों के बीच .net (सी #) आधारित प्रमाणीकृत सत्र कैसे साझा कर सकता हूं?

मुझे किसी भी तरह से दो अनुप्रयोगों में एक ही प्रमाणीकरण सत्र का उपयोग करने की आवश्यकता है। मैं .NET सदस्यता और प्रोफाइल प्रदाताओं का उपयोग कर प्रमाणीकरण के लिए एक ही डीबी और एप्लिकेशन का उपयोग कर रहा हूं। यह ठीक काम करता है, लेकिन उपयोगकर्ताओं को मुख्य रूप से मुख्य एप्लिकेशन के लिए साइन इन होने पर भी एमवीसी ऐप में अलग-अलग लॉगिन करना होगा। मैं किसी भी सुझाव के लिए खुला हूं: enabling state session at a different level, या shared cookies, आदि

इस लॉगिन आवश्यकता को बाईपास करने का सर्वोत्तम तरीका क्या है और क्या मुझे एमवीसी एप्लिकेशन को वेबफॉर्म में एकीकृत करना चाहिए या इसे एक स्वतंत्र एप्लिकेशन के रूप में रखना चाहिए? निर्णय को प्रभावित करने वाली मेरी मुख्य चिंताओं को पूर्ण एकीकरण, और बाद में अनुप्रयोगों के रख-रखाव के लिए लिया जाएगा।

उत्तर

7

पहले, तथ्य यह है एक आवेदन ASP.NET MVC कोई फर्क नहीं यहाँ :)

दूसरा पड़ता है, यहाँ क्या MSDN से करने के लिए एक उदाहरण है उस पृष्ठ से:

<configuration> 
    <system.web> 
    <authentication mode="Forms" > 
     <!-- The name, protection, and path attributes must match 
      exactly in each Web.config file. --> 
     <forms loginUrl="login.aspx" 
     name=".ASPXFORMSAUTH" 
     protection="All" 
     path="/" 
     domain="contoso.com" 
     timeout="30" /> 
    </authentication> 

    <!-- Validation and decryption keys must exactly match and cannot 
     be set to "AutoGenerate". The validation and decryption 
     algorithms must also be the same. --> 
    <machineKey 
     validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
     decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
     validation="SHA1" /> 
    </system.web> 
</configuration> 

पीएस

स्ट्रिपलिंग वॉरियोर की दोनों अनुप्रयोगों को विलय करने की सलाह हालांकि वास्तव में आवश्यक नहीं है लेकिन भविष्य में एकीकरण के लिए बहुत उपयोगी हो सकता है। आप बाद में इसे कर सकते हैं।

+2

+1 मशीन कुंजियों का भी उल्लेख करने के लिए - भले ही वे एक ही मशीन पर हों, यदि ऐप पूल अलग हैं, तो समस्याएं ठीक होने पर समस्याएं होंगी। आपकी डोमेन विशेषता वास्तव में '.contoso.com' पढ़नी चाहिए - आपको केवल एक अवधि के साथ कुकीज़ सेट करने की अनुमति नहीं दी जाएगी। –

0

आप इस एप्लिकेशन को सीधे अपने वेब फॉर्म एप्लिकेशन में एकीकृत करने पर विचार करना चाहेंगे। दोनों एक ही आवेदन में सह-अस्तित्व में हो सकते हैं।

2

फॉर्म प्रमाणीकरण उपयोगकर्ताओं को ट्रैक करने के लिए कुकीज़ का उपयोग करता है। कुकीज़ को केवल उसी डोमेन के बीच साझा किया जा सकता है। तो उदाहरण के लिए यदि आपके पास app1.foo.com और app2.foo.com समान डोमेन कुकी साझा करने के लिए बस उन दो अनुप्रयोगों को कॉन्फ़िगर करें। उदाहरण के लिए दोनों web.config ही रूपों प्रमाणीकरण विन्यास साझा करना चाहिए:

<authentication mode="Forms"> 
    <forms 
     loginUrl="~/Account/LogOn" 
     timeout="2880" 
     domain="foo.com" 
    /> 
</authentication> 

तुम भी सुनिश्चित करना चाहिए कि दोनों आवेदन शेयर एक ही machine keys क्योंकि एक प्रमाणीकरण app1 जरूरतों द्वारा उत्सर्जित कुकी एक ही कुंजी के साथ app2 द्वारा decrypted किया जाना है।

http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

छोटा स्निपेट:

+0

आपकी डोमेन विशेषता वास्तव में '.foo.com' पढ़नी चाहिए - आपको केवल एक अवधि के साथ कुकीज़ सेट करने की अनुमति नहीं दी जाएगी। –

+0

@Zhaph - बेन डुगुइड, जरूरी नहीं, यह काम करेगा। –

0

डेटाबेस में सत्र स्थिति संग्रहीत करें। प्रत्येक सत्र की कुकीज़ में सत्र कुंजी स्टोर करें। दोनों चक्रों के जीवन चक्र में AcquireSessionState ईवेंट पर, कुकी से सत्र आईडी प्राप्त करें, डेटाबेस से सत्र डेटा लोड करें और अपना HttpContext.User अपडेट करें। फिर आपके पास दोनों अनुप्रयोगों में एक ही प्रमाणीकरण डेटा होगा।

+0

आप केवल 'सत्रस्टेट' मोड को 'एसक्यूएल सर्वर' या 'स्टेटसेवर' पर सेट कर सकते हैं और ढांचा आपके लिए यह सब कुछ ख्याल रखेगा (डेटाबेस में सत्र को सत्रबद्ध करना, कुकी में सत्र कुंजी संग्रहीत करना आदि): http : //msdn.microsoft.com/en-us/library/ms178586.aspx –

+0

यह सटीक नहीं लगता है। अगर मुझे सही तरीके से याद किया जाता है, तो सत्र एक आवेदन आईडी के सहयोग से संग्रहीत किया जाएगा। चूंकि वह दो अलग-अलग अनुप्रयोग चला रहा है, यह उसी डेटा को हल नहीं करेगा। – smartcaveman

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