मैं एक सुरक्षित डब्ल्यूसीएफ सेवा लागू कर रहा हूं। प्रमाणीकरण उपयोगकर्ता नाम/पासवर्ड या विंडोज प्रमाण पत्र का उपयोग कर किया जाता है। सेवा एक विंडोज सेवा प्रक्रिया में होस्ट किया गया है। अब, मैं प्रत्येक सर्विस ऑपरेशन के लिए प्राधिकरण को लागू करने का सबसे अच्छा तरीका खोजने का प्रयास कर रहा हूं।डब्ल्यूसीएफ सेवा प्राधिकरण पैटर्न
public EntityInfo GetEntityInfo(string entityId);
आपको बता दें कि, WCF में, वहाँ एक OperationContext वस्तु है जहाँ से आप कॉलर/ग्राहक द्वारा में पारित सुरक्षा क्रेडेंशियल को पुनः प्राप्त कर सकते हैं:
उदाहरण के लिए, निम्न विधि पर विचार करें। अब, प्रमाणीकरण विधि के पहले पंक्ति के समय से पहले ही समाप्त हो चुका होगा। हालांकि, अगर निर्णय इनपुट डेटा पर निर्भर करता है तो हम प्राधिकरण को कैसे कार्यान्वित करते हैं? उदाहरण के लिए, उपर्युक्त मामले में, 'व्यवस्थापक' उपयोगकर्ता कहें (जिनकी अनुमतियां आदि डेटाबेस में संग्रहीत हैं), को इकाई की जानकारी प्राप्त करने की अनुमति है, और अन्य उपयोगकर्ताओं को अनुमति नहीं दी जानी चाहिए ... हम प्राधिकरण जांच कहां डाल सकते हैं?
हम उदाहरण के जांच करने के लिए (मान्य है entityId:
CheckAccessPermission(PermissionType.GetEntity, user, entityId) //user is pulled from the current OperationContext
अब, वहाँ सवालों के एक जोड़े हैं:
हम इतनी तरह विधि की पहली पंक्ति में रख कहो शून्य/खाली मूल्य इत्यादि) प्राधिकरण जांच से पहले या प्राधिकरण जांच के अंदर? दूसरे शब्दों में, अगर प्राधिकरण जांच हर विधि में शामिल की जानी चाहिए, तो क्या यह एक अच्छा पैटर्न है? जो पहले होना चाहिए - तर्क सत्यापन या प्राधिकरण?
जब हम प्राधिकरण जांच इस तरह की जगह पर हैं, तो हम एक डब्ल्यूसीएफ सेवा का परीक्षण कैसे करते हैं, और हमारे पास इकाई परीक्षण में ऑपरेशन कॉन्टेक्स्ट नहीं है !? (मान लीजिए कि मैं किसी भी डब्ल्यूसीएफ सेटअप के बिना सीधे इस सेवा वर्ग कार्यान्वयन का परीक्षण करने की कोशिश कर रहा हूं)।
कोई विचार विचार लोग?
धन्यवाद पॉल। पहले प्राधिकरण करने में समस्या यह है: अगर हम इनपुट तर्कों के आधार पर अनुमतियों की जांच करने की आवश्यकता है तो हम उपयोगकर्ता को कैसे अधिकृत कर सकते हैं? प्राधिकरण के लिए इसका उपयोग करने से पहले, हमें पहले उन तर्कों को मान्य करने की आवश्यकता नहीं है? – Krishna
प्राधिकरण केवल उपयोगकर्ता की पहचान पर निर्भर होना चाहिए। यदि यह इनपुट तर्कों पर निर्भर करता है, तो कॉलर प्राधिकरण प्राप्त करने के लिए आवश्यक मूल्यों को भेज सकता है, इसलिए आपकी प्राधिकरण जांच व्यर्थ हो जाती है। –
नहीं। कहें कि मैं आईडी 'abc1' के साथ किसी ऑब्जेक्ट तक पहुंचना चाहता हूं। मैं 'user1' हूँ। प्रमाणीकरण यह तय करता है कि 'उपयोगकर्ता 1' ऑब्जेक्ट 'abc1' तक पहुंच सकता है या नहीं। तो करने के लिए पहली बात ऑब्जेक्ट आईडी स्ट्रिंग वाले पैरामीटर को सत्यापित करना होगा! – Krishna