2011-04-21 17 views
13

मुझे हाथ से लिखित सुरक्षा, सरल सर्वलेट-फ़िल्टर मिला है जो गैर-अधिकृत उपयोगकर्ता को उनके लॉगिन पृष्ठों पर रीडायरेक्ट नहीं करता है। लॉगिन नियंत्रक सफल प्रमाणन या उनके मुख्य पृष्ठ के बाद अनुरोधित यूआरएल पर उन्हें रीडायरेक्ट करता है। यह दृष्टिकोण ठीक काम करता है, एकमात्र नुकसान, कि मुझे उपयोगकर्ता ऑब्जेक्ट को पास करना होगा जो एचजेपी सत्र में ईजेबी बीन्स के लिए स्टैकट्रैक के माध्यम से संग्रहीत है।मुझे हाथ से लिखित सुरक्षा के खिलाफ जेएएएस का उपयोग क्यों करना चाहिए?

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

मुझे अब स्टैकट्रैक के माध्यम से उपयोगकर्ता को पास करने की आवश्यकता नहीं है, आमंत्रण sessionContext.getCallerPrincipal() पर्याप्त है। लेकिन मुख्य वस्तु मुझे केवल उपयोगकर्ता नाम लौटाती है, उपयोगकर्ता नहीं, इसलिए मुझे उदाहरण के लिए उपयोगकर्ता आईडी की आवश्यकता है तो अतिरिक्त चयन करना होगा।

1) क्या प्रिंसिपल ऑब्जेक्ट का विस्तार करने के लिए वैसे भी है, तो यह अधिक गुणों को स्टोर कर सकता है?

2) मुझे जेएएएस या स्प्रिंग सिक्योरिटी या किसी अन्य सुरक्षा ढांचे का उपयोग क्यों करना चाहिए, क्यों न सिर्फ हाथ से लिखित सर्वलेट फ़िल्टर?

उत्तर

10

2) JAAS की तरह एक मानक सुरक्षा तंत्र का उपयोग कई फायदे हैं:

  1. आप आसानी से बदल सकते हैं जिस तरह से उपयोगकर्ता अपने सर्वर को कॉन्फ़िगर करके पूरी तरह से प्रमाणित करता है - आवश्यकता के बिना अपने कोड के अंदर कुछ भी बदलने की।

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

  3. आप ढांचे की सुरक्षा का लाभ उठा सकते हैं - उदाहरण के लिए। web.xml सुरक्षा टैग, ईजेबी सुरक्षा एनोटेशन। चूंकि जेएएएस प्रमाणित करने का एक मानक तरीका है, इसलिए आप सुनिश्चित कर सकते हैं कि भविष्य की तकनीकों को अपनाना आसान होगा, क्योंकि सभी गंभीर तकनीकें जेएएएस (स्प्रिंग सुरक्षा इत्यादि) का समर्थन करेंगी। यदि आपके सॉफ़्टवेयर को बढ़ने की योजना है, तो आपको निश्चित रूप से मानक की आवश्यकता होगी।

  4. यह आपको समय और प्रयास बचाएगा। जेएएएस प्रमाणीकरण और प्रमाणीकरण दोनों प्रदान करता है, जो मिनटों के भीतर अच्छी तरह से पैक और कॉन्फ़िगर करने योग्य है।

  5. मैं J2EE security पर फ़्यूचर रीडिंग की अनुशंसा करता हूं या आप OWASP मार्गदर्शिका में अधिक संसाधन पा सकते हैं।

+0

लॉगिन मॉड्यूल के अपने स्वयं के कार्यान्वयन को लिखना अधिक पोर्टेबल है क्योंकि यह अतिरिक्त सर्वर कॉन्फ़िगरेशन पर निर्भर नहीं है। जब तक आप ध्यान में रखते हैं कि आपको मैन्युअल रूप से सभी सुरक्षा भूमिकाओं को प्रबंधित करने की आवश्यकता है। –

+0

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

0

1) मुझे नहीं पता कि आप Principal कक्षा का विस्तार कर सकते हैं या नहीं। लेकिन ध्यान दें, LoginModule में, commit() (शायद आपके login() विधि में) को प्रमाणीकरण समाप्त करने से पहले, Subject में प्रमाण-पत्र जोड़ना संभव है। इसके लिए, बस सूची में से किसी एक को ऑब्जेक्ट जोड़ें: विषय। getPrivateCredentials() या विषय। getPublicCredentials() (कोई तर्क के साथ)। आप अपनी खुद की कक्षा, एक स्ट्रिंग, या जो भी आप चाहते हैं जैसी कई वस्तुएं जोड़ सकते हैं।

अपने आवेदन में ऑब्जेक्ट्स को पुनर्प्राप्त करने के लिए, my other answer में विस्तृत प्रक्रिया का उपयोग करें।

import javax.security.jacc.PolicyContext; 

Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container"); 
संबंधित मुद्दे