2009-08-13 19 views
7

मैं है कुछ कोड कॉल करने खिड़कियों सुरक्षा सेटिंग्स का रूप धारण किया और फिर एक अलग मशीनWCF विंडोज़ प्रमाणीकरण सुरक्षा त्रुटि

WindowsIdentity callerWindowsIdentity = ServiceSecurityContext.Current.WindowsIdentity; 
using (callerWindowsIdentity.Impersonate()) 
{ 
    NetTcpBinding binding = new NetTcpBinding(); 
    binding.Security.Mode = SecurityMode.Message; 
    binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows; 
    EndpointAddress endpoint = new EndpointAddress(new Uri("net.tcp://serverName:9990/TestService1")); 
    ChannelFactory<WCFTest.ConsoleHost.IService1> channel = new ChannelFactory<WCFTest.ConsoleHost.IService1>(binding, endpoint); 
    WCFTest.ConsoleHost.IService1 service = channel.CreateChannel(); 
    return service.PrintMessage(msg); 
} 

पर एक और WCF सेवा से कनेक्ट लेकिन मैं त्रुटि मिलती है की कोशिश करता है: "फोन करने वाले नहीं था सेवा द्वारा प्रमाणित " सिस्टम.ServiceModel .... सुरक्षा टोकन के लिए अनुरोध संतुष्ट नहीं हो सका क्योंकि प्रमाणीकरण विफल रहा ...

मैं जिन प्रतिध्वनिओं का प्रतिरूपण करने की कोशिश कर रहा हूं वे बॉक्स के लिए वैल्यू विंडोज प्रमाण-पत्र हैं ।

कोई विचार क्यों?

उत्तर

0

अगली सेवा से आपसे प्रतिरूपण एक मुश्किल मुद्दा है, जिसे "डबल-हॉप" मुद्दा कहा जाता है।

मेरे पास इसके लिए अंतिम उत्तर नहीं है (मैं आमतौर पर उस सेवा के लिए एक स्पष्ट सेवा खाते का उपयोग करके इसे टालता हूं जिसे किसी अन्य सेवा को कॉल करने की आवश्यकता होती है)।

लेकिन: आपको निश्चित रूप से WCF Security Guidance को कोडप्लेक्स पर देखना चाहिए और "प्रतिरूपण" की खोज करना चाहिए - वहां कुछ ऐसे लेख हैं जो मूल कॉलर का प्रतिरूपण करने के सभी इंस और बहिष्कारों को समझाते हैं और यह मुश्किल क्यों है।

मार्क

1

marc_s साथ सहमत इस डबल-हॉप समस्या है।

आप, खिड़कियां प्रमाणीकरण के माध्यम से सभी तरह से प्राप्त करने की आवश्यकता इसलिए:

  • अनुरोध एक खिड़कियों उपयोगकर्ताओं
  • आईआईएस विंडोज़ प्रमाणीकरण का उपयोग करने के लिए कॉन्फ़िगर किया जाना चाहिए के संदर्भ में किया जाना चाहिए
  • वेब कॉन्फ़िगरेशन को प्रतिरूपण के साथ विंडोज प्रमाणीकरण के लिए सेट अप किया जाना चाहिए = सत्य
  • उपयोगकर्ता जो आपका एप्लिकेशन पूल चल रहा है, उसे उपयोगकर्ता का प्रतिरूपण करने की अनुमति दी जानी चाहिए। यह सामान्य जगह है जहां डबल-हॉप समस्या होती है।

एक सही कहा जाता है "प्रमाणीकरण के बाद एक ग्राहक का रूप धारण"

http://blogs.technet.com/askperf/archive/2007/10/16/wmi-troubleshooting-impersonation-rights.aspx

0

क्या आप वाकई सही दोनों हॉप्स पर साख है कर रहे हैं, अगले बात यह है कि कारण हो सकता है मुद्दा एंडपॉइंट DnsIdentity की अंतराल पर सेट की कमी है।

DnsEndpointIdentity identity = new DnsEndpointIdentity("localhost"); // localhost is default. Change if your service uses a different value in the service's config. 
Uri uri = new Uri("net.tcp://serverName:9990/TestService1"); 
endpoint = new EndpointAddress(uri, identity, new AddressHeaderCollection()); 
3

के लिए अपने परिदृश्य का समर्थन करने के लिए, आप कैसे Protocol Transition और Constrained Delegation काम की समझ की आवश्यकता है। इसका समर्थन करने के लिए आपको सक्रिय निर्देशिका और आपके डब्ल्यूसीएफ सेवा एंडपॉइंट दोनों को कॉन्फ़िगर करना होगा। सेवा प्रिंसिपल नेम (एसपीएन) के उपयोग पर ध्यान दें। निम्न लिंक पर नज़र डालें और देखें कि क्या वे आपकी मदद करते हैं। लेख में यह काम करने के लिए आवश्यक पूर्ण अंत-टू-एंड कॉन्फ़िगरेशन का प्रदर्शन करने के लिए एक नमूना है।

How To: Impersonate the Original Caller in WCF Calling from a Web Application

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