2009-08-25 15 views
5

पर आधारित डब्ल्यूसीएफ वेब सेवा प्रमाणीकरण मेरे पास एक डब्ल्यूसीएफ वेब सेवा है जिसे सी # क्लाइंट एप्लिकेशन द्वारा उपभोग किया जा रहा है, और मेरे पास 4 निर्देशिका सक्रिय निर्देशिका में संग्रहीत हैं। क्लाइंट एप्लिकेशन को लॉग इन क्रेडेंशियल्स पास करके इस वेब सेवा को कनेक्ट करना चाहिए।एडी समूह

आवश्यकता:

  1. वेब सेवा ई (सक्रिय निर्देशिका) में संग्रहीत खिड़कियों उपयोगकर्ता क्रेडेंशियल के समूह के आधार पर कार्यक्षमता सीमित करें
  2. पास विशिष्ट उपयोगकर्ता इस वेब सेवा

लिए क्लाइंट अनुप्रयोग से साख प्रश्न:

इस वेब सेवा से कनेक्ट करने पर उपयोगकर्ता में लॉग इन प्रमाणीकृत या मान्य कैसे करें, कौन सा ईवेंट हैंडल उपयोगकर्ता क्रेडेंशियल्स में लॉग इन मान्य करने के लिए आर फ़ंक्शन लागू किया जाएगा।

किसी को भी इस बारे में जानता है तो कृपया मुझे पता है

उत्तर

10

आप की जरूरत है दो रखने के लिए अवधारणाओं के अलावा दे सकता हूँ:

  • प्रमाणीकरण का निर्धारण किया जाता है, जो यह है कि आप कॉल कर रहा है की प्रक्रिया है, और यह सुनिश्चित करना कि वह वास्तव में वह है जो वह होने का दावा करता है; इस उपयोगकर्ता नाम/पासवर्ड, विंडोज क्रेडेंशियल्स (वह पहले से ही पर प्रवेश के माध्यम से अपने विंडोज बॉक्स के लिए स्वयं को प्रमाणीकृत किया था) का उपयोग किया जा सकता है, या कुछ जानकारी (प्रमाण पत्र) के लिए फोन करने वाले की आवश्यकता द्वारा

  • प्राधिकार प्रक्रिया है - एक बार आप जो आप बुला रहा है पता , निर्धारित करने के लिए क्या है कि फोन करने वाले क्या कर सकते हैं (या वह ऐसा नहीं कर सकते क्या)

आदेश सक्रिय निर्देशिका समूहों का उपयोग करने के लिए आपको 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

मार्क

+0

धन्यवाद चाप, मुझे अपने प्रस्तावित समाधान का प्रयास करने दें। बहुत धन्यवाद फिर से। –

+0

यह बहुत अच्छा है, धन्यवाद। मुझे बहुत काम हल किया। आप सुरक्षा अपवाद को कैसे पकड़ते हैं जो फेंक दिया जाता है, हालांकि? ऐसा लगता है कि विधि को बुलाया जाने से पहले फेंक दिया जाता है लेकिन कॉलस्टैक को प्रचारित नहीं किया जाता है ... – trendl

+0

इसे क्लाइंट को फेंक दिया जाता है - क्लाइंट को इससे निपटने की ज़रूरत होती है। –

संबंधित मुद्दे