2011-10-24 17 views
5

मैं दोजो का उपयोग कर एक शुद्ध जावास्क्रिप्ट वेब एप्लिकेशन विकसित करने का प्रयास कर रहा हूं। मुझे जिस समस्या का सामना करना पड़ता है वह एप्लिकेशन के हिस्सों तक पहुंच प्रतिबंधित करने में से एक है। प्रमाणीकृत उपयोगकर्ता सबकुछ तक पहुंचने में सक्षम होना चाहिए, जबकि गैर प्रमाणीकृत उपयोगकर्ता केवल लॉगिन स्क्रीन तक पहुंचने में सक्षम होना चाहिए।डोजो वेब एप्लिकेशन प्रमाणीकरण

मुद्दा यह है कि कुछ भी नहीं (जिसे मैं जानता हूं) किसी उपयोगकर्ता को ब्राउज़र जावास्क्रिप्ट टर्मिनल खोलने और कुछ: app.displayRestrictedContent(); दर्ज करने से रोक देगा और इस प्रकार प्रमाणीकृत उपयोगकर्ताओं के लिए एक स्क्रीन तक पहुंच प्राप्त कर देगा।

मैंने एक AJAX आधारित लॉगिन लागू किया है; सभी AJAX कॉल एक सत्र के साथ सुरक्षित हैं। इसलिए जब गैर-प्रमाणीकृत उपयोगकर्ता प्रतिबंधित स्क्रीन लोड कर सकता है, तो वे इसके लिए डेटा लाने में सक्षम नहीं होंगे। लेकिन फिर भी, इस स्क्रीन के लिए मनमाने ढंग से सुलभ होना गलत लगता है।

क्या मैं असंभव करने की कोशिश कर रहा हूं? if (user.auth) app.displayRestrictedContent(); जैसे कोड लिखने के लिए मूर्खतापूर्ण लगता है जब इसे आसानी से घुमाया जाता है। और इससे मुझे विश्वास होता है कि मैं किसी और के लिए कुछ स्पष्ट नहीं हूं। मुझे शुद्ध जावास्क्रिप्ट आधारित ऐप्स और प्रमाणीकरण मॉडल पर बहुत अधिक जानकारी नहीं मिल रही है।

+0

बीटीडब्ल्यू, बैक एंड केकपीएचपी के माध्यम से लागू किया गया है। – andreb

उत्तर

1

मैं किसी भी तरह से कर रहा हूँ एक विशेषज्ञ का मतलब है, लेकिन यहाँ कुछ विचार है कि मैं इस पर किए गए हैं। मुझे नहीं लगता कि आपने कुछ भी याद किया है (यदि हां, तो भी मेरे पास है) - मुझे लगता है कि यह सभी क्लाइंट अनुप्रयोगों के साथ एक सुंदर मौलिक मुद्दा है, भले ही यह एक संकलित निष्पादन योग्य या जावास्क्रिप्ट है।

बेशक, संकलित निष्पादन योग्य विशेष रूप से यह द्वारा, बाधा उत्पन्न नहीं है क्योंकि यह मशीन कोड है जो बहुत पढ़ने के लिए या उपयोगी कुछ में डिकंपाइल के लिए मुश्किल है में बनाया गया है। हालांकि जावास्क्रिप्ट के साथ, एप्लिकेशन को अक्सर ठीक उसी तरह से परोसा जाता है जैसा आपने लिखा था, और इसलिए इसे संशोधित करना और इसके बारे में तर्क करना आसान है।

जो मुझे पहले अर्ध-समाधान में लाता है: आपके जावास्क्रिप्ट को रोकना। यदि आप shrinksafe पैरामीटर के साथ दोजो के निर्माण उपकरण का उपयोग करते हैं, तो सभी अनावश्यक सफेद जगह हटा दी जाती है और सभी पहचानकर्ता कम हो जाते हैं, जिससे कोड को पढ़ने में काफी मुश्किल होती है। मैंने इसे अर्ध-समाधान कहा, कुछ लोग यह भी कह सकते हैं कि यह बहुत अधिक क्रेडिट दे रहा है - मैं खुद को अभी भी लगता है कि यह करने योग्य है। आखिरकार, संकुचित कोड भी तेजी से डाउनलोड करता है!

दूसरा उपाय मैं अपने ऐप्स में ले "परतों का निर्माण" में अलग-अलग हिस्सों को अलग करने के लिए है। उदाहरण के लिए, अपने निर्माण प्रोफ़ाइल में, मैं

dependencies = { 
    .. 
    layers: [ 
     { name: "../myApp/Core.js", resourceName: "myApp.Core", 
      dependencies: ["myApp.Core", "myApp.Foobar"] 
     }, 
     { name: "../myApp/modules/Login.js", resourceName: "myApp.modules.Login", 
      dependencies: ["myApp.modules.Login", "myApp.modules.LoginUi"...], 
      layerDependencies: ["../myApp/Core.js"] 
     }, 
     { name: "../myApp/modules/Secret.js", resourceName: "myApp.modules.Secret", 
      dependencies: ["myApp.modules.Secret", "myApp.modules.SecretUi"], 
      layerDependencies: ["../myApp/Core.js"], 
      authentication: 42 
     } 
    ] 
} 

की तरह कुछ अब बजाय बनाया जे एस फ़ाइलें स्थिर फ़ाइलों के रूप में सीधे की सेवा का होगा,, मैं, अनुरोध मेरी सर्वर साइड आवेदन पत्र में एक नियंत्रक के माध्यम से चलते हैं जो जांचता है कि जेएस परत को प्रमाणीकरण की आवश्यकता है और क्या उपयोगकर्ता आवश्यक पहुंच के साथ लॉग इन है या नहीं।

इसमें कुछ विपक्ष है। जेएस फाइलों को कैश नहीं किया गया है, और यदि मेरे पास एक ही परत परत में मेरा सभी जेएस था, तो एप्लिकेशन शायद थोड़ा तेज लोड होगा।बेशक यह भी एक सीमा है कि परतों को बनाने के लिए यह कितना फायदेमंद है। अधिक परतों का मतलब अधिक परेशानी है, लेकिन अधिक बारीक अनाज वाले मॉड्यूल का उपयोग भी है।

मुझे इस पर अन्य चीजों को सुनने में दिलचस्पी होगी। यह एक अच्छा सवाल है।

+0

धन्यवाद। यह अच्छी जानकारी है। – andreb

+0

क्या आप लेयरिंग और प्रमाणीकरण प्रणाली के बारे में अधिक बात कर सकते हैं जिसका उपयोग आप जेएस संपत्तियों को ब्राउजर पर वापस लाने के लिए करते हैं? – andreb

1

जब कोई उपयोगकर्ता सफलतापूर्वक लॉगिन करता है तो सर्वर को उसे सत्र टोकन प्रदान करना चाहिए। बाद में, जब भी उपयोगकर्ता संसाधन का अनुरोध करता है (या तो ब्राउज़र को या फिर AJAX के माध्यम से रीडायरेक्ट कर रहा है) तो वह सर्वर को अपना सत्र टोकन दिखाता है (या तो इसे कुकी में संग्रहीत करके और इसे सभी अनुरोधों पर स्वचालित रूप से भेजकर या शरीर में इसे स्पष्ट रूप से पास करके

एक AJAX अनुरोध के) सर्वर तो उपयोगकर्ताओं से सत्र टोकन का उपयोग प्राधिकरण सर्वर साइड नियंत्रित करने के लिए, गलत या पुरानी टोकन के माध्यम से किसी भी अनुरोध को अस्वीकार कर सकते हैं।

https://en.wikipedia.org/wiki/HTTP_cookie#Session_management

+0

धन्यवाद, मेरे पास सत्रों का कामकाजी ज्ञान है। प्रश्न सीधे जावास्क्रिप्ट अनुप्रयोगों की क्लाइंट-साइड प्रकृति से संबंधित है और कैसे गैर अधिकृत उपयोगकर्ता प्रतिबंधित क्षेत्रों तक पहुंच सकते हैं। – andreb

+1

यही मैंने कहा था। ग्राहक पक्ष में आपको एक सत्र पहचानकर्ता रखना होता है जिसे आप स्वयं प्रमाणित करने के लिए उपयोग कर सकते हैं। सर्वर पक्ष में आप प्रस्तुत किए गए सत्र पहचानकर्ताओं के आधार पर संसाधनों तक पहुंच अधिकृत करते हैं (और सर्वर सर्वर पर यह करने की आवश्यकता है - क्लाइंट को भरोसा नहीं किया जा सकता है)। (बीटीडब्लू, मैं नहीं देखता कि स्वीकार्य उत्तर के प्रमाणीकरण के साथ कुछ भी कैसे करना है - यह केवल डोजो बिल्ड सिस्टम के बारे में बात करता है और यह संकुचित जावास्क्रिप्ट के आसपास काम करने के लिए * बहुत आसान * है) – hugomg

+0

उत्तर जावास्क्रिप्ट एप्लिकेशन को विकसित करने में अंतर्दृष्टि प्रदान करता है दोजो का उपयोग करके, जो मैं भी कर रहा हूं। जवाब ने मेरे प्रश्न को एक विशिष्ट तरीके से संबोधित किया। – andreb

2
But still, It seems wrong for this screen to be arbitrarily accessible. 

क्योंकि यह क्लाइंट-साइड कोड है। जो भी आप जेएस में लिखते हैं, या जेएस के लिए संकलित हो जाते हैं, उम्मीद है कि यह उपयोगकर्ताओं द्वारा पठनीय हो।

Am I trying to do the impossible? 

उपयोगकर्ता प्रमाणीकरण के बाद आप गतिशील रूप से जेएस मॉड्यूल लोड कर सकते हैं। तो सबसे पहले, बस 1 लॉगिन मॉड्यूल लोड करें। जब उपयोगकर्ता लॉगिन, सफल होने पर, सर्वर लोड करने के लिए जेएस मॉड्यूल की एक सूची लौटाता है, यदि नहीं, तो खाली सूची लौटाएं। यह उपयोगकर्ताओं द्वारा आपकी वेबसाइट पर आने पर लोड समय में सुधार करने में भी मदद करता है।

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