2015-06-16 12 views
6

मैं जावा ईई 7 बैकएंड पर आरईएसटी एपीआई के साथ एंगुलरजेएस का उपयोग कर रहा हूं। परियोजना एक Wildfly आवेदन सर्वर पर आ जाता है और मैं कुछ सवाल regrading प्रतिभूतियों है:एंगुलरजेएस - जावा ईई रीस्ट सुरक्षा

  1. एन्क्रिप्ट/मैं CryptoJS उपयोग कर रहा हूँ एन्क्रिप्ट और सर्वर साइड पर डिक्रिप्ट करने के लिए (जावा) लेकिन जाहिरा तौर पर हम भेज दिया डेटा को डिक्रिप्ट करने के लिए स्पष्ट रूप से पासफ्रेज, सिफर और नमक केवल एन्क्रिप्टेड हैं। मेरा सवाल यह है कि पासफ्रेज स्पष्ट टेक्स्ट क्यों है? यह गुप्त होना चाहिए और फिर एन्क्रिप्टेड भी होना चाहिए?

  2. आरईएसटी एपीआई के लिए, जावा ईई 7, HTTP सुरक्षा हेडर (मूल-एथ) के लिए उपयोग करने के लिए मानक क्या है? जेसन एक्सेस टोकन? और यह वास्तव में कैसे काम करता है, कुकी पर उपयोगकर्ता सत्र/टोकन स्टोर करने के लिए कहां? मैं सिर्फ यह जानना चाहता हूं कि कोणीय के साथ इसे कैसे किया जाए।

  3. शायद मैं क्लासिक जेएएएस को फॉर्म-आधारित प्रमाणीकरण के साथ उपयोग कर सकता हूं और फिर सर्वर पक्ष पर request.login() प्रमाणीकृत होने के बाद मेरा ईजेबी @Role द्वारा संरक्षित किया जाएगा।

  4. AngularJS में पृष्ठों की सुरक्षा करने का तरीका क्या है? फिलहाल मैं web.xml का उपयोग कर रहा हूं और यूआरएल पैटर्न डाल रहा हूं, शायद एक बेहतर तरीका है?

मैं पहले से ही इस तरह उदाहरण के काफी मात्रा में पाए:

AngularJs and Jboss and JAAS (omnisecurity)

how to integrate angularjs and java jaas based authentication?

कुछ उपयोगकर्ताओं

में यह उल्लेख है:

* index.html page should contain token inside html to avoid CSRF 
* token shouldn't be stored in a cookie storage 
* Each request should be signed with header param 
* Server should validate every request by passed header 
* If cookie usage is a must you should validate referer in order to prevent CSRF 

लेकिन वहाँ ठोस नहीं है इस पर लागू करने के तरीके पर उदाहरण, esp ईएससीली सीएसआरएफ।

+1

आपका बिंदु 1 सुंदर के विषय में लगता है। CryptoJS एक जावास्क्रिप्ट लाइब्रेरी है, क्या आप वास्तव में सर्वर पक्ष पर नाशर्न या कुछ के साथ इसका उपयोग कर रहे हैं, या क्या आप यह कहना चाहते हैं कि आप इसका उपयोग जावास्क्रिप्ट में क्लाइंट साइड पर कर रहे हैं? आप कहां से पास भेज रहे हैं और आप इसे कहां भेज रहे हैं? पासफ्रेज के लिए उपयोग किया जाता है (प्रमाणीकरण, एन्क्रिप्शन के लिए पीबीकेडीएफ, आदि)? आपको नमक को एन्क्रिप्ट करने की आवश्यकता नहीं है, जिसे सार्वजनिक माना जाता है। – kag0

उत्तर

3

एन्क्रिप्ट/डेटा मैं CryptoJS उपयोग कर रहा हूँ एन्क्रिप्ट और सर्वर साइड (जावा) पर डिक्रिप्ट करने के लिए लेकिन जाहिरा तौर पर हम स्पष्ट में पदबंध भेज दिया डिक्रिप्ट करने के लिए, सिफर और नमक केवल एन्क्रिप्टेड होते हैं। मेरा सवाल यह है कि पासफ्रेज़ स्पष्ट टेक्स्ट क्यों है? यह गुप्त होना चाहिए और फिर के रूप में एन्क्रिप्टेड होना चाहिए?

जैसे ही आप स्पष्ट रूप से एक कुंजी (पासफ्रेज?) भेज रहे हैं - एन्क्रिप्शन बेकार है।

उचित क्लाइंट-सर्वर सुरक्षा प्राप्त करने के लिए, HTTPS का उपयोग करें। सरल, प्रभावी और अधिक सुरक्षित। आम तौर पर वेब एप्लिकेशन पक्ष पर एन्क्रिप्ट करना एक बुरा विचार है, क्योंकि उपयोगकर्ता या 'मैन-इन-द-बीच' कुंजी और डेटा को पुनर्प्राप्त या संशोधित कर सकता है।

अलग-अलग मामला अंत-टू-एंड सुरक्षा है, जब ग्राहक एन्क्रिप्ट करता है, एन्क्रिप्टेड डेटा पोस्ट करता है और वे उपयोगकर्ता के लिए उपलब्ध एन्क्रिप्शन कुंजी के साथ संग्रहीत/संसाधित होते हैं। यदि यह मामला नहीं है और सेवा को आगे के संचालन के लिए डेटा की आवश्यकता है, तो HTTPS जाने का तरीका है।

REST API के लिए, जावा ईई 7, HTTP सुरक्षा शीर्ष लेख (मूल लेखन) के लिए उपयोग करने के लिए मानक क्या है? जेसन एक्सेस टोकन? और यह वास्तव में काम करता है, जहां कुकी पर उपयोगकर्ता सत्र/टोकन स्टोर करना है? मैं बस जानना चाहता हूं कि कोणीय के साथ इसे कैसे किया जाए।

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

बाकी सेवाओं ब्राउज़र मैं बुनियादी प्रमाणीकरण छोड़ चाहते हैं से सीधे कहा जाता है के लिए बस (अन्यथा उपयोगकर्ता पॉप-अप प्रमाणीकरण खिड़की मिलेगा)

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

एक और विकल्प एक सत्र टोकन (कुकी या प्राधिकरण शीर्षलेख के रूप में भेजा गया) है, जहां आपको सत्रों का प्रबंधन करने की आवश्यकता है (टोकन स्टोर करें, लॉगआउट पर टोकन साफ़ करें ...)। ऐप सर्वर सत्र कुकीज़ का उपयोग करके अन्य सेवाओं द्वारा आपकी सेवाओं को अनुपयोगी बना दिया जाता है (अभी भी एक प्रश्न - क्या आप चाहते हैं कि सेवाओं को तीसरे पक्ष द्वारा पुन: प्रयोज्य करने की आवश्यकता हो), लेकिन आप अंतर्निहित प्राधिकरण (जेएएएस, भूमिकाएं, ...) प्राप्त करते हैं।

शायद मैं प्रमाणीकृत करने सर्वर साइड पर प्रपत्र-आधारित प्रमाणीकरण और तो होने request.login() के साथ क्लासिक JAAS का उपयोग तो मेरे EJB सभी @Role द्वारा संरक्षित किया जाएगा कर सकते हैं।

वास्तव में, यह एक तरीका है कि आप उपयोगकर्ता को प्रमाणीकृत और अधिकृत कैसे करते हैं और टोकन जारी करते हैं (jwt, कुकी, अन्य ...)।

AngularJS में पृष्ठों की सुरक्षा करने का तरीका क्या है? इस पल के लिए मैं web.xml का उपयोग करके हूं और यूआरएल पैटर्न डाल रहा हूं, शायद बेहतर तरीका है?

डिफ़ॉल्ट वेब प्रमाणीकरण ठीक होना चाहिए।

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

मज़ा

+1

"अन्य अनुप्रयोगों द्वारा अनुपयोगी" .. सच है, जब तक हम संघीय टोकन के बारे में बात नहीं कर रहे हैं। – Blackthorne

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