SOAP उदाहरण के साथ वेब सेवा(WS) सुरक्षा ट्यूटोरियल
WS सुरक्षा क्या है?
WS सुरक्षा एक मानक है जो वेब सेवा के भाग के रूप में डेटा के आदान-प्रदान के समय सुरक्षा को संबोधित करता है। यह SOAP की एक प्रमुख विशेषता है जो इसे वेब सेवाएं बनाने के लिए बहुत लोकप्रिय बनाती है।
किसी भी वेब एप्लीकेशन में सुरक्षा एक महत्वपूर्ण विशेषता है। चूँकि लगभग सभी वेब एप्लीकेशन इंटरनेट के संपर्क में होते हैं, इसलिए वेब एप्लीकेशन के लिए सुरक्षा खतरे की संभावना हमेशा बनी रहती है। इसलिए, वेब-आधारित एप्लीकेशन विकसित करते समय, यह सुनिश्चित करना हमेशा अनुशंसित होता है कि एप्लीकेशन को सुरक्षा को ध्यान में रखते हुए डिज़ाइन और विकसित किया गया हो।
सुरक्षा खतरे और प्रतिवाद
वेब एप्लिकेशन के लिए प्रतिकूल सुरक्षा खतरों को समझने के लिए, आइए वेब एप्लिकेशन के एक सरल परिदृश्य पर नजर डालें और देखें कि सुरक्षा के संदर्भ में यह कैसे काम करता है।
HTTP के लिए उपलब्ध सुरक्षा उपायों में से एक HTTPS प्रोटोकॉल है। HTTPS वेब पर क्लाइंट और सर्वर के बीच संचार का सुरक्षित तरीका है। HTTPS सुरक्षित संचार के लिए सिक्योर सॉकेट लेयर या SSL का उपयोग करता है। क्लाइंट और सर्वर के बीच कोई भी संचार होने पर क्लाइंट और सर्वर दोनों के पास खुद को असली के रूप में पहचानने के लिए एक डिजिटल प्रमाणपत्र होगा।
क्लाइंट और सर्वर के बीच मानक HTTPS संचार में, निम्नलिखित चरण होते हैं
- क्लाइंट, क्लाइंट प्रमाणपत्र के ज़रिए सर्वर को अनुरोध भेजता है। जब सर्वर क्लाइंट प्रमाणपत्र देखता है, तो वह अपने कैश सिस्टम में एक नोट बनाता है ताकि उसे पता चले कि प्रतिक्रिया सिर्फ़ इसी क्लाइंट को वापस जानी चाहिए।
- इसके बाद सर्वर अपना प्रमाणपत्र भेजकर क्लाइंट को खुद को प्रमाणित करता है। इससे यह सुनिश्चित होता है कि क्लाइंट सही सर्वर से संचार कर रहा है।
- इसके बाद क्लाइंट और सर्वर के बीच सभी संचार एन्क्रिप्टेड होते हैं। इससे यह सुनिश्चित होता है कि यदि कोई अन्य उपयोगकर्ता सुरक्षा को तोड़ने और आवश्यक डेटा प्राप्त करने का प्रयास करता है, तो वे इसे पढ़ने में सक्षम नहीं होंगे क्योंकि यह एन्क्रिप्टेड होगा।
लेकिन उपरोक्त प्रकार की सुरक्षा सभी स्थितियों में काम नहीं करेगी। ऐसा समय आ सकता है जब क्लाइंट कई सर्वरों से बात कर सकता है। नीचे दिया गया एक उदाहरण दिखाता है कि क्लाइंट एक समय में डेटाबेस और वेब सर्वर दोनों से बात कर रहा है। ऐसे मामलों में, सभी जानकारी https प्रोटोकॉल से होकर नहीं गुजर सकती।
यहीं पर WS सुरक्षा विनिर्देश को लागू करके ऐसी बाधाओं को दूर करने के लिए SOAP काम आता है। इस विनिर्देश के साथ, सभी सुरक्षा संबंधी डेटा SOAP हेडर तत्व में परिभाषित किया जाता है।
हेडर तत्व में नीचे उल्लिखित जानकारी हो सकती है
- यदि SOAP बॉडी के भीतर संदेश को किसी सुरक्षा कुंजी के साथ हस्ताक्षरित किया गया है, तो उस कुंजी को हेडर तत्व में परिभाषित किया जा सकता है।
- यदि SOAP बॉडी के भीतर कोई भी तत्व एन्क्रिप्टेड है, तो हेडर में आवश्यक एन्क्रिप्शन कुंजियाँ होंगी ताकि संदेश को गंतव्य तक पहुंचने पर डिक्रिप्ट किया जा सके।
एकाधिक सर्वर वातावरण में, SOAP प्रमाणीकरण की उपरोक्त तकनीक निम्नलिखित तरीके से मदद करती है।
- चूँकि SOAP बॉडी एन्क्रिप्टेड है, इसलिए इसे केवल उस वेब सर्वर द्वारा ही डिक्रिप्ट किया जा सकेगा जो वेब सेवा को होस्ट करता है। ऐसा इसलिए है क्योंकि SOAP प्रोटोकॉल को किस तरह से डिज़ाइन किया गया है।
- मान लीजिए यदि संदेश को HTTP अनुरोध में डेटाबेस सर्वर को भेजा जाता है, तो इसे डिक्रिप्ट नहीं किया जा सकता, क्योंकि डेटाबेस में ऐसा करने के लिए सही तंत्र नहीं है।
- केवल जब अनुरोध वास्तव में SOAP प्रोटोकॉल के रूप में वेब सर्वर तक पहुंचता है, तो वह संदेश को समझने और क्लाइंट को उचित प्रतिक्रिया भेजने में सक्षम होगा।
हम आगामी विषयों में देखेंगे कि WS सुरक्षा मानक का उपयोग किस प्रकार किया जा सकता है सोप.
वेब सेवा सुरक्षा मानक
जैसा कि पिछले अनुभाग में चर्चा की गई है, WS-Security मानक SOAP हेडर में सुरक्षा परिभाषा को शामिल करने पर केन्द्रित है।
SOAP हेडर में क्रेडेंशियल्स को 2 तरीकों से प्रबंधित किया जाता है।
सबसे पहले, यह UsernameToken नामक एक विशेष तत्व को परिभाषित करता है। इसका उपयोग वेब सेवा को उपयोगकर्ता नाम और पासवर्ड पास करने के लिए किया जाता है।
दूसरा तरीका है बाइनरीसिक्योरिटीटोकन के ज़रिए बाइनरी टोकन का इस्तेमाल करना। इसका इस्तेमाल उन स्थितियों में किया जाता है, जिनमें केर्बेरोस या X.509 जैसी एन्क्रिप्शन तकनीक का इस्तेमाल किया जाता है।
नीचे दिया गया चित्र WS सुरक्षा में सुरक्षा मॉडल के काम करने के तरीके को दर्शाता है
उपरोक्त कार्यप्रवाह में निम्नलिखित चरण होते हैं
- वेब सेवा क्लाइंट से सिक्योरिटी टोकन सेवा को अनुरोध भेजा जा सकता है। यह सेवा एक मध्यवर्ती वेब सेवा हो सकती है जिसे विशेष रूप से वास्तविक SOAP वेब सेवा को उपयोगकर्ता नाम/पासवर्ड या प्रमाणपत्र प्रदान करने के लिए बनाया गया है।
- इसके बाद सुरक्षा टोकन को वेब सेवा क्लाइंट को भेज दिया जाता है।
- इसके बाद वेब सेवा क्लाइंट ने वेब सेवा को कॉल किया, लेकिन इस बार यह सुनिश्चित किया कि सुरक्षा टोकन SOAP संदेश में सन्निहित है।
- वेब सेवा तब प्रमाणीकरण टोकन के साथ SOAP संदेश को समझती है और फिर सुरक्षा टोकन सेवा से संपर्क कर यह देख सकती है कि सुरक्षा टोकन प्रामाणिक है या नहीं।
नीचे दिया गया स्निपेट प्रमाणीकरण भाग का प्रारूप दिखाता है जो WSDL दस्तावेज़ का हिस्सा है। अब नीचे दिए गए स्निपेट के आधार पर, SOAP संदेश में 2 अतिरिक्त तत्व शामिल होंगे, एक उपयोगकर्ता नाम और दूसरा पासवर्ड।
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType></xs:element>
जब SOAP संदेश वास्तव में क्लाइंट और सर्वर के बीच पास किया जाता है, तो संदेश का वह भाग जिसमें उपयोगकर्ता क्रेडेंशियल होते हैं, ऊपर दिखाए गए जैसा दिख सकता है। wsse तत्व नाम SOAP के लिए परिभाषित एक विशेष तत्व नाम है और इसका मतलब है कि इसमें सुरक्षा आधारित जानकारी शामिल है।
सुरक्षित वेब सेवाएँ कैसे बनाएँ
अब आइए SOAP वेब सेवा सुरक्षा उदाहरण देखें। हम SOAP अध्याय में पहले दिखाए गए उदाहरण पर एक वेब सेवा सुरक्षा बनाएंगे और इसमें एक सुरक्षा परत जोड़ेंगे।
हमारे उदाहरण में, हम एक सरल वेब सेवा बनाने जा रहे हैं, जिसका उपयोग वेब सेवा को कॉल करने वाले एप्लिकेशन को एक स्ट्रिंग लौटाने के लिए किया जाएगा। लेकिन इस बार, जब वेब सेवा को बुलाया जाता है, तो कॉलिंग सेवा को क्रेडेंशियल प्रदान करने की आवश्यकता होती है। आइए हमारी SOAP वेब सेवा बनाने और उसमें सुरक्षा परिभाषा जोड़ने के लिए नीचे दिए गए चरणों का पालन करें।
चरण 1) पहला कदम एक खाली जगह बनाना है एएसपी.नेट वेब अनुप्रयोग। Visual Studio 2013 से, मेनू विकल्प फ़ाइल->नया प्रोजेक्ट पर क्लिक करें।
एक बार जब आप न्यू प्रोजेक्ट विकल्प पर क्लिक करते हैं, तो विजुअल स्टूडियो आपको प्रोजेक्ट का प्रकार चुनने और प्रोजेक्ट के आवश्यक विवरण देने के लिए एक और डायलॉग बॉक्स देगा। इसे अगले चरण में समझाया गया है
चरण 2) इस चरण में,
- सुनिश्चित करें कि आप पहले चुनें C# ASP.NET वेब एप्लिकेशन के लिए वेब टेम्पलेट। वेब सेवा प्रोजेक्ट बनाने के लिए प्रोजेक्ट इस प्रकार का होना चाहिए। इस विकल्प को चुनने पर, Visual Studio किसी भी वेब-आधारित एप्लिकेशन द्वारा आवश्यक आवश्यक फ़ाइलों को जोड़ने के लिए आवश्यक कदम उठाएगा।
- अपने प्रोजेक्ट के लिए एक नाम दें जो हमारे मामले में " दिया गया हैवेबसर्विस.asmx.” फिर एक स्थान देना सुनिश्चित करें, जहां परियोजना फाइलें संग्रहीत की जाएंगी।
एक बार ऐसा हो जाने पर आपको Visual Studio 2013 में आपके समाधान एक्सप्लोरर में बनाई गई प्रोजेक्ट फ़ाइल दिखाई देगी।
चरण 3) इस चरण में,
हम अपने प्रोजेक्ट में एक वेब सेवा फ़ाइल जोड़ने जा रहे हैं
- सबसे पहले नीचे दिखाए अनुसार प्रोजेक्ट फ़ाइल पर राइट-क्लिक करें
- एक बार जब आप प्रोजेक्ट फ़ाइल पर राइट-क्लिक करते हैं, तो आपके पास वेब सेवा फ़ाइल जोड़ने के लिए "Add->Web Service (ASMX)" विकल्प चुनने का मौका होता है। बस वेब सेवा नाम फ़ाइल के लिए ट्यूटोरियल सेवा का नाम प्रदान करें।
उपरोक्त चरण से एक डायलॉग बॉक्स खुलेगा, जिसमें वेब सेवा फ़ाइल का नाम दर्ज किया जा सकता है। इसलिए नीचे दिए गए डायलॉग बॉक्स में फ़ाइल नाम के रूप में TutorialService का नाम दर्ज करें।
चरण 4) अपनी ट्यूटोरियल सर्विस asmx फ़ाइल में निम्न कोड जोड़ें। कोड का नीचे दिया गया स्निपेट एक कस्टम क्लास जोड़ने के लिए उपयोग किया जाता है जिसका उपयोग SOAP संदेश उत्पन्न होने पर SOAP हेडर को बदलने के लिए किया जाएगा। चूँकि अब हम SOAP हेडर में सुरक्षा क्रेडेंशियल जोड़ना चाहते हैं, इसलिए यह चरण आवश्यक है।
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
कोड स्पष्टीकरण:-
- अब हम एक अलग क्लास बना रहे हैं जिसका नाम है प्रमाण हेडर जो प्रकार का है सोपहैडर क्लासजब भी आप SOAP हेडर में जो कुछ भी पास किया जाता है उसे बदलना चाहते हैं, तो आपको एक क्लास बनाने की ज़रूरत होती है जो .Net के इन-बिल्ट SoapHeader क्लास का उपयोग करता है। SOAPheader को कस्टमाइज़ करके, अब हमारे पास वेब सेवा को कॉल करते समय 'यूजरनेम' और 'पासवर्ड' पास करने की क्षमता है।
- फिर हम 'यूजरनेम' और 'पासवर्ड' के वेरिएबल परिभाषित करते हैं जो स्ट्रिंग प्रकार के होते हैं। इनका उपयोग यूजरनेम और पासवर्ड के मानों को रखने के लिए किया जाएगा जो वेब सेवा को पास किए जाते हैं।
चरण 5) अगले चरण के रूप में, निम्नलिखित कोड को उसी में जोड़ना होगा TutorialService.asmx फ़ाइलयह कोड वास्तव में हमारी वेब सेवा के फ़ंक्शन को परिभाषित करता है। यह फ़ंक्शन क्लाइंट को एक स्ट्रिंग "यह एक गुरु99 वेब सेवा है" लौटाता है। लेकिन इस बार, स्ट्रिंग केवल तभी लौटाई जाएगी जब क्लाइंट एप्लिकेशन वेब सेवा को क्रेडेंशियल पास करेगा।
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } eise return "This is a Guru99 Web service"; }
कोड स्पष्टीकरण:-
- यहाँ, हम AuthHeader क्लास का एक ऑब्जेक्ट बना रहे हैं जिसे पहले चरण में बनाया गया था। यह ऑब्जेक्ट हमारे पास भेजा जाएगा गुरु99वेबसर्विस जिसमें यूजरनेम और पासवर्ड की बारीकी से जांच की जा सकेगी।
- [SoapHeader] विशेषता का उपयोग अब यह निर्दिष्ट करने के लिए किया जाता है कि जब वेब सेवा को कॉल किया जाता है, तो उसे उपयोगकर्ता नाम और पासवर्ड पास करना आवश्यक होता है।
- कोड के इस ब्लॉक में, हम वास्तव में वेब सेवा को कॉल करते समय पास किए गए उपयोगकर्ता नाम और पासवर्ड की जांच कर रहे हैं। यदि उपयोगकर्ता नाम “Guru99” के बराबर है और पासवर्ड “Guru99Password” के बराबर है, तो क्लाइंट को “यह एक Guru99 वेब सेवा है” का संदेश भेजा जाता है। अन्यथा, यदि गलत उपयोगकर्ता आईडी और पासवर्ड पास किया जाता है, तो क्लाइंट को एक त्रुटि भेजी जाएगी।
यदि कोड सफलतापूर्वक निष्पादित हो जाता है, तो जब आप अपना कोड ब्राउज़र में चलाएंगे तो निम्नलिखित आउटपुट दिखाया जाएगा।
आउटपुट:
प्रोग्राम चलाने पर उपरोक्त आउटपुट दिखाया जाता है, जिसका अर्थ है कि वेब सेवा अब उपलब्ध है। आइए सर्विस पर क्लिक करें Descriptआयन लिंक.
सेवा विवरण से, अब आप देख पाएंगे कि उपयोगकर्ता नाम और पासवर्ड इसके तत्व हैं डबल्यूएसडीएल फ़ाइल. वेब सेवा लागू होने पर इन मापदंडों को भेजने की आवश्यकता होती है.
वेब सेवा सुरक्षा सर्वोत्तम अभ्यास
वेब सेवाओं के साथ काम करते समय निम्नलिखित सुरक्षा संबंधी बातों पर ध्यान दिया जाना चाहिए:
1. ऑडिटिंग और लॉग प्रबंधन - वेब सेवाओं पर आने वाले सभी अनुरोधों को लॉग करने के लिए एप्लिकेशन लॉगिंग का उपयोग करें। यह इस बारे में विस्तृत रिपोर्ट देता है कि किसने वेब सेवा का आह्वान किया है और यदि कोई सुरक्षा उल्लंघन होता है तो प्रभाव विश्लेषण में मदद कर सकता है।
2. वेब सेवा पर कॉल का प्रवाह - वेब सेवाओं में कॉल के प्रवाह को नोट करने का प्रयास करें। डिफ़ॉल्ट रूप से, एक एप्लिकेशन इन वेब सेवाओं के बीच पारित प्रमाणीकरण टोकन के साथ कई वेब सेवा अनुरोधों को कॉल कर सकता है। वेब सेवाओं के बीच सभी कॉल की निगरानी और लॉगिंग की आवश्यकता होती है।
3. संवेदनशील जानकारी – अपनी लॉग प्रविष्टियों में संवेदनशील जानकारी जैसे पासवर्ड या क्रेडिट कार्ड नंबर या किसी भी तरह की अन्य गोपनीय जानकारी शामिल न करें। अगर कोई ऐसा इवेंट है जिसमें यह जानकारी है, तो लॉगिंग से पहले उसे हटा दिया जाना चाहिए।
4. व्यवसाय पर नज़र रखें Operaमाहौल - महत्वपूर्ण व्यावसायिक संचालन को ट्रैक करें। उदाहरण के लिए, अपने एप्लिकेशन को विशेष रूप से संवेदनशील विधियों और व्यावसायिक तर्क तक पहुंच रिकॉर्ड करने के लिए इंस्ट्रूमेंट करें। आइए एक ऑनलाइन शॉपिंग एप्लिकेशन का उदाहरण लेते हैं। एक सामान्य एप्लिकेशन में कई चरण होते हैं जैसे कि खरीदे जाने वाले आइटम चुनना, कार्ट में लोड किए गए आइटम और फिर अंतिम खरीदारी। इस पूरे व्यावसायिक वर्कफ़्लो को वेब सेवा द्वारा ट्रैक किया जाना चाहिए।
5. उचित प्रमाणीकरण - प्रमाणीकरण वह तंत्र है जिसके द्वारा क्लाइंट एक निश्चित क्रेडेंशियल का उपयोग करके वेब सेवा के साथ अपनी पहचान स्थापित कर सकते हैं जो उस पहचान को साबित कर सकते हैं। किसी को कभी भी उपयोगकर्ता क्रेडेंशियल संग्रहीत नहीं करना चाहिए, और इसलिए, यदि वेब सेवा को कॉल करने के लिए WS सुरक्षा का उपयोग किया जाता है, तो यह ध्यान रखना चाहिए कि वेब सेवा को SOAP हेडर में भेजे गए क्रेडेंशियल संग्रहीत नहीं करने चाहिए। इन्हें वेब सेवा द्वारा त्याग दिया जाना चाहिए।
सारांश
- वेब सेवाओं पर कॉल करते समय अतिरिक्त सुरक्षा प्रदान करने के लिए SOAP WS सुरक्षा नामक एक अतिरिक्त परत प्रदान करता है।
- WS सुरक्षा को एक सरल उपयोगकर्ता नाम या पासवर्ड के साथ बुलाया जा सकता है या प्रमाणीकरण के लिए बाइनरी प्रमाणपत्रों के साथ उपयोग किया जा सकता है
- हमने देखा है कि नेट. हम वेब सेवा को अनुकूलित कर सकते हैं ताकि SOAP हेडर तत्व के भाग के रूप में उपयोगकर्ता नाम और पासवर्ड पारित किया जा सके।