2010-09-24 15 views
8

मुझे किसी तृतीय पक्ष को सेवा प्रदान करने की आवश्यकता है जो हस्ताक्षरित टाइमस्टैम्प के साथ साबुन संदेश भेज देगा।डब्लूएसएफ सुरक्षा के साथ डब्ल्यूसीएफ सेवा के लिए हस्ताक्षर किए गए टाइमस्टैम्प की आवश्यकता है केवल

मैं इसका समर्थन करने के लिए अपनी सेवा को कैसे कॉन्फ़िगर कर सकता हूं?

अद्यतन मैं साबुन संदेश का स्वरूप है कि हम के बाद कर रहे हैं लेकिन WCF दोनों उपयोगकर्ता नाम और टाइमस्टैम्प टोकन पर हस्ताक्षर करने पर जोर के करीब पाने के लिए प्रबंधित किया है, वहाँ के लिए बाध्य संशोधित करने के लिए एक रास्ता है केवल टाइमस्टैम्प पर हस्ताक्षर करें?

  • टाइमस्टैम्प तत्व हस्ताक्षर किया जाना चाहिए:


    इसके अलावा अद्यतन यहाँ हमारी आवश्यकताओं हैं।

  • हस्ताक्षर करने के लिए प्रयुक्त प्रमाणपत्र पर सीएन नाम उपयोगकर्ता नाम टोकन तत्व में उपयोगकर्ता नाम से मेल खाता है।
  • हस्ताक्षर करने के लिए प्रयुक्त प्रमाणपत्र BinarySecurityToken तत्व में भेजा जाना चाहिए।
  • KeyInfo तत्व में केवल एक सुरक्षा टोकन संदर्भ तत्व होना चाहिए, जिसका उपयोग BinarySecurityToken को संदर्भित करने के लिए किया जाना चाहिए।
  • एक कैनोलिकलाइजेशन एल्गोरिदम निर्दिष्ट होना चाहिए।
  • हस्ताक्षर विधि निर्दिष्ट होना चाहिए और SHA-1 या SHA-2 alghorithm होना चाहिए।
  • अलग-अलग हस्ताक्षरों का उपयोग किया जाना चाहिए।

कोई सुझाव?

मौजूदा config

क्लाइंट बाइंडिंग

<bindings> 
    <wsHttpBinding> 
    <binding name="WSBC"> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="Certificate" proxyCredentialType="None"></transport> 
     <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

ग्राहक Endpoint

<client> 
    <endpoint address="https://localhost/WcfTestService/Service2.svc" 
    behaviorConfiguration="CCB" binding="wsHttpBinding" 
    bindingConfiguration="WSBC" 
    contract="ServiceReference2.IService2" 
    name="wsHttpBinding_IService2" /> 
</client> 

ग्राहक व्यवहार

<behaviors> 
    <endpointBehaviors> 
    <behavior name="MBB"> 
     <clientCredentials> 
     <clientCertificate findValue="03 58 d3 bf 4b e7 67 2e 57 05 47 dc e6 3b 52 7f f8 66 d5 2a" 
          storeLocation="LocalMachine" 
          storeName="My" 
          x509FindType="FindByThumbprint" /> 
     <serviceCertificate> 
      <defaultCertificate findValue="03 58 d3 bf 4b e7 67 2e 57 05 47 dc e6 3b 52 7f f8 66 d5 2a" 
           storeLocation="LocalMachine" 
           storeName="My" 
           x509FindType="FindByThumbprint" /> 
     </serviceCertificate> 
     </clientCredentials> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

सेवा बाइंडिंग

<bindings> 
    <wsHttpBinding> 
    <binding name="ICB"> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="Certificate" proxyCredentialType="None"></transport> 
     <message clientCredentialType="UserName" 
        negotiateServiceCredential="false" 
        establishSecurityContext="false" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

serice Endpoint

<service name="WcfTestService.Service2" behaviorConfiguration="SCB"> 
    <endpoint  address="" binding="wsHttpBinding" contract="WcfTestService.IService2" 
    bindingConfiguration="ICB" name="MS" /> 
</service> 

सेवा व्यवहार

<behaviors> 
    <serviceBehaviors> 
    <behavior name="SCB"> 
     <serviceCredentials> 
     <serviceCertificate  findValue="4d a9 d8 f2 fb 4e 74 bd a7 36 d7 20 a8 51 e2 e6 ea 7d 30 08" 
           storeLocation="LocalMachine" 
           storeName="TrustedPeople" 
           x509FindType="FindByThumbprint" /> 
     <userNameAuthentication 
      userNamePasswordValidationMode="Custom" 
      customUserNamePasswordValidatorType="WcfTestService.UsernameValidator, WcfTestService" /> 
     <clientCertificate> 
      <authentication certificateValidationMode="None" revocationMode="NoCheck" /> 
     </clientCertificate> 
     </serviceCredentials> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
+1

क्या आपने कॉन्फ़िगरेशन काम करने का प्रबंधन किया था ताकि केवल टाइमस्टैंप तत्व पर हस्ताक्षर किए गए हों? मैं वर्तमान में एक ही चीज़ हासिल करने की कोशिश कर रहा हूं। – Edward

उत्तर

3

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

इन MSDN लिंक समझाने कस्टम बाइंडिंग और SecurityBindingElement सार आधार वर्ग:

http://msdn.microsoft.com/en-us/library/ms730305.aspx

http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.securitybindingelement.aspx

+0

यह मैं नहीं था! मैं सही परिणामों का उत्पादन करने के लिए कस्टम बाइंडिंग प्राप्त करने के लिए अपने बालों को खींच रहा हूं! मुझे प्रश्न को अद्यतन करना चाहिए, क्योंकि मूल रूप से जो मैं चाहता हूं वह मूलभूत हैपैप बाइंडिंग (साबुन 1.1) सुरक्षा मोड के साथ = ट्रांसपोर्ट विथ मैसेज क्रेडेंशियल संदेश और परिवहन दोनों प्रमाणपत्रों के साथ .. लेकिन इसके अतिरिक्त हमें उपयोगकर्ता नाम को भेजने/प्राप्त करने की आवश्यकता है ..! –

+0

टिप्पणी @ डॉग ईर्स के लिए धन्यवाद, क्या आपको लगता है कि यह आपके अधिक विशिष्ट अनुरोध के साथ एक नया प्रश्न बनाने लायक है? –

0

आप संदेश अनुबंधों के साथ ऐसा कर सकते हैं, देखें: http://msdn.microsoft.com/en-us/library/ms730255.aspx

यहाँ एक उदाहरण है उपरोक्त लिंक से:

[MessageContract] 
public class PatientRecord 
{ 
    [MessageHeader(ProtectionLevel=None)] public int recordID; 
    [MessageHeader(ProtectionLevel=Sign)] public string patientName; 
    [MessageHeader(ProtectionLevel=EncryptAndSign)] public string SSN; 
    [MessageBodyMember(ProtectionLevel=None)] public string comments; 
    [MessageBodyMember(ProtectionLevel=Sign)] public string diagnosis; 
    [MessageBodyMember(ProtectionLevel=EncryptAndSign)] public string medicalHistory; 
} 

नोट सुरक्षा के स्तर को कोई नहीं, साइन, EncryptAndSign

+0

मुझे नहीं लगता कि यह काम करेगा मैं मूल रूप से एक wsse जोड़ने की कोशिश कर रहा हूं: UserNameToken लेकिन इस दृष्टिकोण का उपयोग करना काम नहीं करता है क्योंकि ढांचे टोकन को पहचानता है और एक त्रुटि फेंकता है क्योंकि यह बाध्यकारी भाग के रूप में अपेक्षित नहीं है? –

1

WCF देशी रूप टाइमस्टैम्प नहीं बल्कि उपयोगकर्ता नाम पर हस्ताक्षर करने की अनुमति नहीं है। सबसे पहले मुझे पूरा यकीन है कि यह आपके सामने आने वाली समस्या से संबंधित नहीं है - एक सर्वर दोनों मामलों को संभालने में सक्षम होना चाहिए। यदि आपको इसकी आवश्यकता है तो मैं सुझाव देता हूं कि सुरक्षा में सभी पर उपयोगकर्ता नाम का उपयोग न करें (उदाहरण के लिए "अज्ञात फॉर सर्टिफिकेट" का सुरक्षा मोड) और उसके बाद उपयोगकर्ता नाम/पासवर्ड टैग को सही जगह पर शीर्षलेख में मैन्युअल रूप से पुश करने के लिए एक कस्टम संदेश एन्कोडर लागू करें (ले लो संदेश में किसी भी हस्ताक्षरित हिस्से को बदलने की परवाह नहीं है, मुख्य रूप से टाइमस्टैम्प)।

+0

यह एक पुराना सवाल है कि मैं बस हल करना चाहता था, मूल आवश्यकता सिर्फ उपयोगकर्ता नाम के लिए थी, पासवर्ड के बिना, (उपयोगकर्ता नाम एसएसएल प्रमाण सामान्य नाम धारण करना था)। हमें निर्देश दिया जा रहा था, हमें सर्वर और क्लाइंट दोनों को लागू करना था जो किसी तृतीय-पक्ष सिस्टम से कनेक्ट होगा जिसका हमारे पास (जावा) पर नियंत्रण नहीं था। मैं एन्कोडर को एक घुमाव दूंगा, कस्टम एन्कोडिंग पर जानकारी के किसी भी लिंक उपयोगी होगा। सधन्यवाद। –

+0

http://msdn.microsoft.com/en-us/library/ms751486.aspx –

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