हमारे पास एक ऐसी सेवा है जो उपयोगकर्ता नाम और पासवर्ड के आधार पर प्राधिकरण को संभालती है। कॉल का उपयोगकर्ता नाम और पासवर्ड भाग बनाने के बजाय, हम इसे SOAP शीर्षलेख में रखते हैं।इस वेब सेवा सुरक्षा योजना के साथ संभावित समस्याएं क्या हैं?
एक सामान्य परिदृश्य में, एक वेब सेवा निष्पादन की शुरुआत में प्राधिकरण सेवा को कॉल करती है ताकि यह जांच सके कि कॉलर को इसे कॉल करने की अनुमति है। समस्या यह है कि इन वेब सेवाओं में से कुछ एक-दूसरे को कॉल करते हैं, और इसका मतलब यह होगा कि प्रत्येक उप-कॉल पर उपयोगकर्ता की अनुमतियां जांच की जाती हैं, और यह बहुत महंगा हो सकती है।
जो मैंने सोचा था वह प्राधिकरण सेवा पहली कॉल के बाद सुरक्षा टोकन लौटा देना था। फिर, प्राधिकरण सेवा को हर बार कॉल करने के बजाय, वेब सेवा स्थानीय स्तर पर सुरक्षा शीर्षलेख को सत्यापित कर सकती है।
public sealed class SecurityHeader : SoapHeader
{
public string UserId; // Encrypted
public string Password; // Encrypted; Just realized this field isn't necessary [thanks CJP]
public DateTime TimeStamp; // Used for calculating header Expiry
public string SecurityToken;
}
सामान्य विचार है कि SecurityHeader हर कॉल के साथ की जाँच हो जाता है: - (आवश्यक अवधारणा को वर्णन करने छंटनी सी # कोड)
सुरक्षा हैडर कुछ इस तरह लग रहा है। यदि यह अस्तित्व में है, तो समाप्त नहीं हुआ है, और सुरक्षा टोकन मान्य है, तो वेब विधि सामान्य के रूप में प्राप्त होती है। अन्यथा यह या तो एक त्रुटि लौटाएगा, या यह एक नया सुरक्षा हैडर
सुरक्षा टोकन उपयोगकर्ता आईडी, पासवर्ड और टाइमस्टैम्प के नमकीन हैश पर आधारित है। प्रतिकृति को रोकने के लिए हर दिन नमक बदल जाता है।
एक समस्या जो मैं देखता हूं वह यह है कि किसी उपयोगकर्ता को वेब सेवा ए तक पहुंचने की अनुमति हो सकती है, लेकिन वेब सेवा बी नहीं। यदि वह ए को कॉल करता है और सुरक्षा टोकन प्राप्त करता है, क्योंकि अब इसका मतलब है कि बी उसे दे देगा अगर वह उसी टोकन का उपयोग करता है। मुझे इसे बदलना है ताकि सुरक्षा टोकन केवल उपयोगकर्ता सेवा से वेब सेवा के बजाय वेब सेवा से वेब सेवा के लिए मान्य हो। यह ठीक होना चाहिए यदि उपयोगकर्ता ए को कॉल करता है जो बी को कॉल करता है, लेकिन यदि उपयोगकर्ता सेवा ए और फिर सेवा डी को कॉल करता है तो ठीक नहीं है। इसके आस-पास एक तरीका है जो तर्कसंगत संबंधित सेवाओं के लिए एक सामान्य कुंजी (या चाबियों का एक सेट) असाइन करना है। (यानी यदि ग्राहक ए कर सकता है तो तार्किक रूप से वह बी भी कर सकता है)।
वैकल्पिक रूप से, मुझे सुरक्षा शीर्षलेख के हिस्से के रूप में उपयोगकर्ता की संपूर्ण अनुमति सेट को एन्कोड करना होगा। मुझे जांच करनी होगी कि ओवरहेड क्या होगा।
संपादित करें:
कई लोगों ने मुझे पहले से ही है WS-सुरक्षा और SAML आदि जैसे अन्य सुरक्षा योजनाओं को देख उल्लेख किया है। वास्तव में, मुझे डब्ल्यूएस-सुरक्षा से विचार मिला। समस्या यह है कि अन्य योजनाएं मुझे आवश्यक कार्यक्षमता प्रदान नहीं करती हैं (प्रमाणीकरण जानकारी को कैशिंग और बिना किसी डेटाबेस डेटाबेस के प्रतिलिपि के खिलाफ सुरक्षा)। अगर कोई ऐसी योजना के बारे में जानता है जो करता है तो मैं इसके बजाय इसका उपयोग करूँगा। इसके अलावा, यह प्रमाणीकरण के बारे में नहीं है। यह मेरे नियंत्रण से परे एक और तंत्र द्वारा संभाला जाता है।
यदि यह पता चला है कि प्रमाणीकरण डेटा कैश करने का कोई तरीका नहीं है, तो इसका मतलब है कि मुझे केवल प्रत्येक स्तर पर प्राधिकरण के उपरांत को लेना होगा।
एक एसएएमएल दावा निम्न जैसा दिखता है: "क्लाइंट एक्स की भूमिका ए और बी है। यह दावा समय टी के साथ मान्य है, हस्ताक्षर, ऑथ सेवा।" यह आपको क्या चाहिए? – ykaganovich
मैं आज एसएएमएल और एक्सएसीएमएल की समीक्षा करूंगा। – ilitirit