2010-05-27 10 views
5

क्या <security mode="Transport> का उपयोग करते समय मेरी वेब सेवा विधि के अंदर किस क्लाइंट प्रमाणपत्र का उपयोग किया गया था, इस बारे में जानकारी खींचने का कोई तरीका है? मैं OperationContext.Current के माध्यम से sifted लेकिन कुछ भी स्पष्ट नहीं मिला।परिवहन सुरक्षा मोड का उपयोग कर डब्ल्यूसीएफ सेवा से प्रमाणपत्र जानकारी

मेरे सर्वर विन्यास इस प्रकार है:

<basicHttpBinding> 
    <binding name="SecuredBasicBindingCert"> 
     <security mode="Transport"> 
     <message clientCredentialType="Certificate" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 

मैं किसी तृतीय पक्ष पब/उप प्रणाली है जो दुर्भाग्य से प्रमाणीकरण के लिए DataPower उपयोग कर रहा है के साथ काम कर रहा हूँ। ऐसा लगता है जैसे मैं इस कॉन्फ़िगरेशन के साथ डब्ल्यूसीएफ का उपयोग कर रहा हूं, तो मैं कॉलर के बारे में कोई जानकारी प्राप्त करने में असमर्थ हूं (क्योंकि वास्तव में कोई प्रमाण पत्र नहीं भेजा जाता है)।

मुझे किसी भी तरह से यह पता लगाने में सक्षम होना चाहिए कि मेरी कॉन्फ़िगरेशन को बदलने के बिना मेरी सेवा को कॉल करने या उन्हें अपने पेलोड को बदलने के लिए कहने की आवश्यकता है।

+0

मैं केवल एक अद्वितीय क्वेरीस्ट्रिंग जोड़कर एंडपॉइंट के पते का लाभ लेने पर विचार कर रहा हूं। QueryString को '((System.ServiceModel.Channels.HttpRequestMessageProperty) सिस्टम के माध्यम से पढ़ा जा सकता है। ServiceModel.OperationContext.Current.IncomingMessageProperties [System.ServiceModel.Channels.HttpRequestMessageProperty.Name])। QueryString' – Langdon

उत्तर

5

हां, लेकिन यह अनजान है।

सबसे पहले, सुनिश्चित करें और सिस्टम की सेवा करें। आपकी सेवा लाइब्रेरी से इडेंटिटीमोडेल असेंबली।

अब, कुछ इसी तरह जोड़ने आपकी सेवा पद्धति जहां आप क्लाइंट प्रमाणपत्र के बारे में जानना चाहते हैं के लिए निम्न:

// Find the certificate ClaimSet associated with the client 
foreach (ClaimSet claimSet in OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets) 
{ 
    X509CertificateClaimSet certificateClaimSet = claimSet as X509CertificateClaimSet; 
    if (certificateClaimSet != null) 
    { 
     // We found the ClaimSet, now extract the certificate 
     X509Certificate2 certificate = certificateClaimSet.X509Certificate; 

     // Do something interesting with information contained in the certificate 
     Debug.Print("Certificate Subject: " + certificate.Subject); 
    } 
} 

आशा इस मदद करता है!

+0

उत्तर के लिए धन्यवाद, लेकिन' ऑपरेशन कॉन्टेक्स्ट .Current.ServiceSecurityContext.AuthorizationContext' खाली है! शायद आईआईएस डब्ल्यूसीएफ को प्रमाणपत्र प्रदान नहीं करता है? – Langdon

+0

या शायद यह केवल तब उपलब्ध है जब ''? – Langdon

+0

मुझे नहीं पता, यह एक आत्म-होस्टेड परिदृश्य में net.tcp बाध्यकारी के साथ परिवहन स्तर सुरक्षा का उपयोग करते समय हमारे लिए काम करता है। मुझे नहीं पता कि प्राधिकरण कॉन्टेक्स्ट आपके मामले में क्यों शून्य होगा। – luksan

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