2008-11-27 14 views
9

के माध्यम से डिस्कनेक्ट WPF आवेदन में ActiveDirectory प्रयोक्ताओं की GetRoles मैं एक परियोजना आवश्यकता है, जहां मैं एक दूरस्थ/डिस्कनेक्ट WPF आवेदन में ActiveDirectory के खिलाफ प्रमाणित करने के लिए की जरूरत है।प्रमाणित और MembershipProvider

शायद यह करने के लिए प्रयास करने के लिए कई तरीके है, लेकिन क्या सबसे अच्छा तरीका ActiveDirectory के MembershipProvider का उपयोग कर सकता है?

  1. प्रमाणित है कि उपयोगकर्ता मौजूद है:

    मैं की जरूरत है।

  2. ई उपयोगकर्ता के समूहों और भूमिकाओं प्राप्त करते हैं।

यह नेटवर्क के बाहर सक्रिय निर्देशिका पर स्थित दूरस्थ स्थान से होने की आवश्यकता है।

उत्तर

15

WinForms या WPF एप्लिकेशन के भीतर से आप अब "Client Application Services" का लाभ उठा सकते हैं (धन्यवाद बहुत ही सामान्य नाम के लिए एमएस, मदद की तलाश अब बहुत दर्दनाक है!)।

यह आपको एक WCF सेवा है जो लॉगिन मान्य कर सकते हैं करने के लिए कनेक्ट करने के लिए अनुमति देता है। उपर्युक्त लिंक में एक वॉथथ्रू है जो दिखाती है कि यह काम करने के लिए कितना आसान है, एक बार आपके पास एक कार्यरत ऐप है, तो आप एक अलग सदस्यताप्रदाता और/या रोलप्रोवाइडर को इंगित करने के लिए अपनी कॉन्फ़िगरेशन को संशोधित कर सकते हैं।

यह ध्यान देने योग्य है कि आउट ऑफ़ द बॉक्स समाधान में ActiveDirectoryMembershipProvider नामक सदस्यता प्रदाता शामिल है, लेकिन सक्रिय निर्देशिका के लिए कोई रोलप्रोवाइडर नहीं है।

यदि आपको भूमिकाएं (या समूह) प्राप्त करने की क्षमता की आवश्यकता होती है और आप .NET 4.0 के साथ काम कर रहे हैं तो आप नई सक्रिय निर्देशिका API का लाभ उठा सकते हैं जो सब कुछ आसान बनाता है, अर्थात् System.DirectoryServices.AccountManagement। सदस्यता और भूमिका सेवाओं का सबसे बुनियादी के लिए आप अपने खुद के बुनियादी MembershipProvider और बनाने के लिए निम्नलिखित से चर्चा करना चाहेंगे RoleProvider:

  • MembershipProvider.ValidateUser() - PrincipalContext.ValidateCredentials()
  • RoleProvider.GetAllRoles() का उपयोग करना चाहिए - एक नया PrincipalSearcher()
  • RoleProvider.IsUserInrole के लिए एक नया GroupPrincipal() एक स्रोत के रूप में उपयोग() - UserPrincipal का उपयोग करें। उपयोगकर्ता को प्राप्त करने के लिए FindByIdentity() विधि, GroupPrincipal का उपयोग करें। FindByIdentity() समूह पाने के लिए है, तो उपयोगकर्ता पर IsMemberOf() विधि का उपयोग करता है, तो वे समूह के सदस्य हैं को देखने के लिए।

आप जितनी आवश्यक हो उतनी कम या ज्यादा एपीआई लागू कर सकते हैं, आपको ऐसा करने के लिए नए खाता प्रबंधन नामस्थान में जो कुछ भी चाहिए, उसे ढूंढना चाहिए।