आदेश सक्रिय निर्देशिका समूहों का उपयोग करने के लिए आपको WCF में एक सुरक्षा मोड का उपयोग करने की जरूरत है कि समर्थन करता है विंडोज प्रमाण पत्र। शुरुआत से विंडोज क्रेडेंशियल्स का उपयोग करना सबसे आसान है, जो wsHttp बाइंडिंग और नेट टीसीपी बाइंडिंग के लिए डिफ़ॉल्ट है - इस मामले में, कॉलर हमेशा प्रत्येक कॉल के साथ अपने विंडोज क्रेडेंशियल्स के साथ पास करेगा, और आप सर्वर की तरफ देखकर सर्वर की तरफ देख सकते हैं ServiceSecurityContext.Current.WindowsIdentity
:
WindowsIdentity caller = ServiceSecurityContext.Current.WindowsIdentity;
यह एक इंट्रानेट परिदृश्य में अच्छी तरह से काम करता है - हर कोई एक कॉर्पोरेट फ़ायरवॉल के पीछे है और वैसे भी अपनी मशीनों पर प्रमाणीकृत। इसे सक्षम करने के लिए, बस wsHttp या netTcp बाइंडिंग का उपयोग करें (मैं इस मामले में netTcp की अनुशंसा करता हूं)।
अन्य थोड़ा अधिक जटिल मामला तब होता है जब आपका ग्राहक X.50 9 प्रमाणपत्र प्रस्तुत करता है, और फिर आप अपने नेटवर्क में मौजूदा पक्ष उपयोगकर्ता को सर्वर पक्ष पर मैप करते हैं। हालांकि, यह बल्कि उन्नत है।
एक बार आपका कॉलर प्रमाणित हो गया है, उदा। आप जानते हैं कि कौन कॉल कर रहा है, आप विशेषाधिकारों को सीमित करने के लिए नियमित भूमिका-आधारित सुरक्षा मॉडल का उपयोग कर सकते हैं। बस अपनी विधियों के लिए [PrincipalPermission(....)]
विशेषताओं को जोड़ें जिन्हें आप संरक्षित करना चाहते हैं, और यदि उपयोगकर्ता इनमें से किसी भी आवश्यकता से मेल नहीं खाता है, तो एक सुरक्षा अपवाद फेंक दिया जाएगा और विधि निष्पादित नहीं की जाएगी।
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
[PrincipalPermission(SecurityAction.Demand, Name = "JohnDoe")]
public string SayHello(string caller)
{
......
}
आप उन "PrincipalPermission" विशेषताओं का एक से अधिक हो सकता है, और वे एक "या" -fashion में एक साथ मिलान - यदि उनमें से किसी एक वर्तमान फोन करने वाले से मेल खाता है, वह करने की अनुमति दी हो जाएगा कहते हैं।
भूमिका-आधारित सुरक्षा का उपयोग करने के तरीके के बारे में अधिक जानकारी के लिए इस आलेख के पृष्ठ 4 को देखें Fundamentals of WCF Security।
मार्क
धन्यवाद चाप, मुझे अपने प्रस्तावित समाधान का प्रयास करने दें। बहुत धन्यवाद फिर से। –
यह बहुत अच्छा है, धन्यवाद। मुझे बहुत काम हल किया। आप सुरक्षा अपवाद को कैसे पकड़ते हैं जो फेंक दिया जाता है, हालांकि? ऐसा लगता है कि विधि को बुलाया जाने से पहले फेंक दिया जाता है लेकिन कॉलस्टैक को प्रचारित नहीं किया जाता है ... – trendl
इसे क्लाइंट को फेंक दिया जाता है - क्लाइंट को इससे निपटने की ज़रूरत होती है। –