2008-11-13 11 views
7

के साथ App.config में विंडोज रोल प्रमाणीकरण का उपयोग करना मैं एक डब्ल्यूसीएफ सेवा का उपयोग कर रहा हूं और सेवा के साथ नेट.tcp एंडपॉइंट का उपयोग कर रहा हूं प्रमाणीकरण के प्रिंसिपल पर्मिशनमोड का उपयोग करें विन्डोज ग्रुप।डब्ल्यूसीएफ

वर्तमान में सेवा के कार्यान्वयन में मैं प्रत्येक विधि के लिए भूमिका आवश्यकताओं को निर्धारित करने के लिए प्रिंसिपलप्रमिशन विशेषता का उपयोग कर रहा हूं।

 [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] 
     [OperationBehavior(Impersonation = ImpersonationOption.Required)] 
     public string method1() 

मैं app.config में सेट की गई भूमिका के कॉन्फ़िगरेशन को छोड़कर, वही सटीक चीज़ करने की कोशिश कर रहा हूं। ऐसा करने का कोई तरीका है और अभी भी विंडोज समूह प्रमाणीकरण का उपयोग कर रहे हैं?

धन्यवाद

उत्तर

3

तो मैं समझ गया अच्छी तरह से आप कार्यावधि में भूमिका का चयन करना चाहते हैं। यह डब्ल्यूसीएफ ऑपरेशन के भीतर permission मांग के साथ किया जा सकता है। जैसे

public string method1() 
{ 
    PrincipalPermission p = new PrincipalPermission(null, "Administrators"); 
    p.Demand(); 
    ... 
8

आप IIS में अपने WCF सेवा की मेजबानी कर रहे हैं, यह ASP.NET वर्कर प्रक्रिया में चला जाएगा, तो आप प्रमाणीकरण और प्राधिकरण कॉन्फ़िगर कर सकते हैं के रूप में आप ASMX वेब सेवाओं के साथ करना होगा जिसका मतलब है:

<system.Web> 
    <authentication mode="Windows"/> 
    <authorization> 
     <allow roles=".\Administrators"/> 
     <deny users="*"/> 
    </authorization> 
</system.Web> 

फिर आपको आईआईएस में अपने एंडपॉइंट पर अनाम पहुंच को अक्षम करना होगा, और इसके बजाय विंडोज इंटीग्रेटेड प्रमाणीकरण सक्षम करना होगा।
आईआईएस प्रबंधन कंसोल में आप अपनी वर्चुअल निर्देशिका के लिए 'गुण' संवाद लाने के द्वारा ऐसा करते हैं। फिर आपको 'निर्देशिका सुरक्षा' टैब में सुरक्षा सेटिंग्स मिल जाएगी।

बेशक, उपलब्ध एकमात्र संचार चैनल HTTP होगा।

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WindowsSecurity"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://localhost/myservice" 
        binding="wsHttpBinding" 
        bindingConfiguration="WindowsSecurity" 
        contract="IMyService" /> 
    </client> 
</system.serviceModel> 

ध्यान रखें कि आपके सेवा समाप्ति बिंदु wsHttpBinding का उपयोग करता है, तो तो आप भी अपने समाप्ति बिंदु को एसएसएल जोड़ना होगा: ग्राहक इन सेटिंग के साथ परिवहन स्तरीय पर अनुरोध में उनके Windows पहचान प्रदान करना होगा चूंकि आप परिवहन स्तर की सुरक्षा का उपयोग करते समय डब्ल्यूसीएफ द्वारा लागू की गई आवश्यकता है।
आप के बजाय basicHttpBinding के लिए जाना है, तो आप जहां SSL नहीं रह गया है की आवश्यकता होती है एक कम सुरक्षित प्रमाणीकरण मोड WCF में उपलब्ध TransportCredentialOnly कहा जाता है, का उपयोग करने में सक्षम हैं।

अधिक विस्तृत जानकारी के लिए, here डब्ल्यूसीएफ में सुरक्षा बुनियादी ढांचे का एक अच्छा अवलोकन है।

+3

कृपया ध्यान दें कि यदि आप ऐसा करना चाहते हैं तो आपको अपनी web.config फ़ाइल में ASP.NET संगतता मोड सक्षम करने की आवश्यकता है। अन्यथा यह काम नहीं करेगा (और एक त्रुटि भी फेंक नहीं देगा)। – Rocklan

+0

नोट: इसके लिए काम करने के लिए, system.web/roleManager/@enabled को झूठा होना चाहिए, या छोड़ा जाना चाहिए, अन्यथा भूमिका आईआईएस होगी। नेट रोल, और विंडोज समूह नहीं। – Polyfun