2014-05-14 15 views
9

Tôi cần sử dụng dịch vụ web được bảo mật với WS-Security từ ASP.NET.Gọi một dịch vụ web với WS Security từ .NET

Tôi đang thử nghiệm dịch vụ với soapUI, là yêu cầu phong bì:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://aduana.gov.py/webservices"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <web:agregarGuia> 
     <!--Optional:--> 
     <guia>?</guia> 
     <!--Optional:--> 
     <autenticacion> 
      <!--Optional:--> 
      <codAduana>?</codAduana> 
      <!--Optional:--> 
      <firmaWSAA>?</firmaWSAA> 
      <!--Optional:--> 
      <idUsuario>?</idUsuario> 
      <!--Optional:--> 
      <ticketWSAA>?</ticketWSAA> 
     </autenticacion> 
     </web:agregarGuia> 
    </soapenv:Body> 
</soapenv:Envelope> 

Và câu trả lời tôi nhận được là:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <env:Header/> 
    <env:Body> 
     <env:Fault> 
     <faultcode>env:Server</faultcode> 
     <faultstring>org.jboss.ws.core.CommonSOAPFaultException: This service requires &lt;wsse:Security>, which is missing.</faultstring> 
     </env:Fault> 
    </env:Body> 
</env:Envelope> 

Vì vậy, tôi đã liên lạc với nhà cung cấp dịch vụ và họ nói với tôi rằng việc sử dụng WS-Security là bắt buộc để gọi dịch vụ. Do đó, thông điệp SOAP được gửi đến máy chủ phải được ký bằng chứng chỉ của tôi với chứng chỉ của tôi.

Vấn đề là tôi không biết cách thực hiện điều đó. Cho đến nay, tôi đã thêm một Tài liệu tham khảo dịch vụ và tôi chuyển chứng chỉ được đề cập trong mã:

var srvRef = new DnaSoapClient(); 
srvRef.ClientCredentials.ClientCertificate.Certificate = theCert; 
var response = srvRef.agregarManifiesto(dnaManifiesto); 

Tôi đã googled và một số người khuyên bạn nên WCF. Tôi đang xây dựng một ứng dụng ASP.NET 4.5. Lựa chọn của tôi với kịch bản này là gì? Tôi cần biết cách ký thư bằng chứng chỉ của mình.

EDIT 1: tôi đã có thể để thúc đẩy vấn đề này, bây giờ tôi có thể gửi thông điệp SOAP ký với chứng chỉ và tôi gần hoàn thành nhiệm vụ của tôi. Bây giờ tôi thất bại trong việc thiết lập các yếu tố chính xác trong thẻ bảo mật, tôi đã chỉnh sửa câu hỏi để hiển thị cả phong bì, chính xác và của tôi.

đúng: đây là một phong bì mẫu cho một yêu cầu đúng

<soapenv:Header> 
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-B259DAB3D28E48CB6A140000796019094">MIIC9TCCAd2gAwIBAgIIUiM4nWs8kfcwDQYJKoZIhvcNAQEFBQAwNzERMA8GA1UEAwwIQWRtaW5DQTExFTATBgNVBAoMDEVKQkNBIFNhbXBsZTELMAkGA1UEBhMCU0UwHhcNMTQwMzIwMTkxMTIwWhcNMTgxMjIwMTQzNzEzWjBBMRQwEgYDVQQDDAtjb3VyaWVyLnRudDEOMAwGA1UECwwFc29maWExDDAKBgNVBAoMA2RuYTELMAkGA1UEBhMCcHkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOS71x5+ChwGzWs4VlLgkePbU8/zFHUrrE8nFNVsukMCc5q5hCK8/CeNM+mxImilLdJrGoC2/000lQetB9B3AqIrAdOfBFU4/qsAlgWI+kt2jnUsJMLRjQfxhAKMeX4RUb0CmTcsnXtWlFvYFFjiUi9nUJVSxCsmldVFgLIAHRPjAgMBAAGjfzB9MB0GA1UdDgQWBBTCwBBmU7f/4SmNz7GNJ25ILkPuhjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFDF+1hOSdgg2DFOUofnnXdx9TxjeMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAALVVGGNsTSMcfDBwkkNQH3MpfiNTo/mhH8ahqUVN1+5BIwWstv8fH0Sl9ea1XShKLPDfDIx8WSzUUIt/93f74B3a3oMpBtbVEiku2BKUp5cJfkYe2c5zPOxk3nzmQwcEoB++RgX9DJOtUkKA/It2IM9/8ggUyjceJQCpBRiA9Kg7+h3HfmOKNn+9/pNu498JXhSRKa8Jr4pp/1udYRk+W8sKGEBtAU9MvL3y0AbvLhUD+MZyvpHGB17fslC8Nnd5EBQH8hQD+DWGepyCBIlb0NA13YEoLMcRKDcWvSPd0UGWo2G0IOeUZaGuzzIz2n04QrXvnqQKAOFd9yH2VfGtWE=</wsse:BinarySecurityToken> 
    <ds:Signature Id="SIG-96" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     <ds:SignedInfo> 
     <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ec:InclusiveNamespaces PrefixList="soapenv web" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"></ec:InclusiveNamespaces> 
     </ds:CanonicalizationMethod> 
     <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"></ds:SignatureMethod> 
     <ds:Reference URI="#id-95" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
       <ec:InclusiveNamespaces PrefixList="web" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"></ec:InclusiveNamespaces> 
      </ds:Transform> 
      </ds:Transforms> 
      <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"></ds:DigestMethod> 
      <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">whvAdAkypsWVXHXbIz/T54n0dBw=</ds:DigestValue> 
     </ds:Reference> 
     </ds:SignedInfo> 
     <ds:SignatureValue> 
     MdHy5mceNtQWUD5WmVOzZU8roxD3EQkQmcZA9LsfhBcp3cFAD3P1qJJ9EyrRFBs5yCiYDY716Wzh 
     M+tFybt1+EujXZZ3ytk4XaahkexNAG51iup1wvw0Km+nsj4u/x8DzTA/J9EG3ZdTSUrIVBsFcEQa 
     TF4BwUAgGBS87xqL5zc= 
     </ds:SignatureValue> 
     <ds:KeyInfo Id="KI-B259DAB3D28E48CB6A140000796019095"> 
     <wsse:SecurityTokenReference wsu:Id="STR-B259DAB3D28E48CB6A140000796019096" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
      <wsse:Reference URI="#X509-B259DAB3D28E48CB6A140000796019094" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"></wsse:Reference> 
     </wsse:SecurityTokenReference> 
     </ds:KeyInfo> 
    </ds:Signature> 
    <wsu:Timestamp wsu:Id="TS-94"> 
     <wsu:Created xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2014-05-13T19:06:00.188Z</wsu:Created> 
     <wsu:Expires xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2014-05-13T19:07:00.188Z</wsu:Expires> 
    </wsu:Timestamp> 
    </wsse:Security> 
</soapenv:Header> 

Mine, điều này không làm việc

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Header> 
    <VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink">uIDPowmum40QT95GqsY7XPKT7LIAAAAAvMwgorinWU+AVOWH+3TPjP6NBU03AZtHqle8GLRYcYAACQAA</VsDebuggerCausalityData> 
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <u:Timestamp u:Id="_0"> 
     <u:Created>2014-05-15T21:30:20.723Z</u:Created> 
     <u:Expires>2014-05-15T21:35:20.723Z</u:Expires> 
     </u:Timestamp> 
     <o:BinarySecurityToken u:Id="uuid-16d1441d-2f30-40a0-ae4e-ec5d557d2261-2" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">MIIC9jCCAd6gAwIBAgIINNZyZplkQHgwDQYJKoZIhvcNAQEFBQAwNzERMA8GA1UEAwwIQWRtaW5DQTExFTATBgNVBAoMDEVKQkNBIFNhbXBsZTELMAkGA1UEBhMCU0UwHhcNMTQwMzIwMTgzMjQ3WhcNMTgxMjIwMTQzNzEzWjBCMRUwEwYDVQQDDAxjb3Vycmllci5kaGwxDDAKBgNVBAsMA09QUzEOMAwGA1UECgwFREhMUFkxCzAJBgNVBAYTAlBZMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGoP0dxByIfto/hqJCOhobTdwQJ3AxJkqUeSNFnprAH8zi6HjBJhzkXptqXiR9GZR1H4U3UaN6aczKVh2PaPqU8ooTxjST0ywWBgXA1WP3ukrybUKxpSvqmiRJ/cANAYLovL+gmh2v/fqPiLs7vsgT+zj1330wRGqtrokYPMjlbQIDAQABo38wfTAdBgNVHQ4EFgQU6IHB4XfP7+rbryy1Ru8kFcfSDqcwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQxftYTknYINgxTlKH5513cfU8Y3jAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4IBAQB3NQC+0/VmC7A1MStKdc2NctTo7P+mhvIBe54U/Vs8I5vXiatKz01BzHIbl7chjP063V4YTtehDCGkwUTtARqpkua7RfdlMqsmcr1s3qnD4lUpGuAeVW0Wsrhu1xGjPf02fTBdD3yyGWCeUiNvKuoweeATlGyB/VlHJaZHN4HuJCnWlPic6uUUMBYqrOOa+wJr/OCFHqkEiBsUihD6ergj7AeAAFcG41GI2ZjVWK/PEB71sbQqqGgLpigAS9f8PNMm+TnQuizrvLPKm3hanOKYr9ORrbWjZCL3dva1YobK4ykvUYpncj6YsOtuDi62RcHYjT7IF9UoeZHBE2vePc+K</o:BinarySecurityToken> 
     <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
     <SignedInfo> 
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
      <Reference URI="#_0"> 
      <Transforms> 
       <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
      </Transforms> 
      <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
      <DigestValue>pM8KraJSLZumo77gD9+JF2f8eBU=</DigestValue> 
      </Reference> 
     </SignedInfo> 
     <SignatureValue>MZ9ZTKeGj5KNUEn4R6cQhRhOdK0frNK1O5KRGbM+YqfvzlVwVKQ6n7p9rncbtrdGsLg3CVwUVwB7PBF78tDx3p0LjF/Eg015t6qouSyK/92qL3oRz/8TbqLKpe/1uySdmGhrqPrVlTDF2rHuFGwmQVSILyUVLg/nW7K+EDwS/Lg=</SignatureValue> 
     <KeyInfo> 
      <o:SecurityTokenReference> 
      <o:Reference URI="#uuid-16d1441d-2f30-40a0-ae4e-ec5d557d2261-2"/> 
      </o:SecurityTokenReference> 
     </KeyInfo> 
     </Signature> 
    </o:Security> 
    </s:Header> 
</s:Envelope> 
+0

Điều gì sẽ xảy ra khi bạn sử dụng 'DnaSoapClient'? –

+0

@JohnSaunders dịch vụ phát nổ trong khuôn mặt của tôi với java.lang.NullPointerException.Đó là lý do tại sao tôi quyết định thử nghiệm nó với SoapUI. – Diane

+1

Nhưng 'NullPointerException' rõ ràng là một lỗi trong máy chủ. Bạn có thể nói chuyện với những người máy chủ và yêu cầu họ nếu một cái gì đó bạn đang gửi chúng gây ra lỗi của họ? Có thể phía bạn đang thực sự làm việc và dịch vụ có lỗi. –

Trả lời

11

tôi quản lý để làm việc này tôi đăng giải pháp ở đây cho người khác. Để tóm tắt, nhiệm vụ trong tay là tiêu thụ một dịch vụ web được viết bằng java với các tính năng bảo mật ws. Hãy để tôi làm rõ rằng đây sẽ là một nhiệm vụ dễ dàng nếu nhà phát triển dịch vụ web có ý thức viết một wsdl tốt và/hoặc họ là những người hợp tác. Thật không may họ không phải là bất kỳ. Nếu bạn gặp trường hợp này, bạn phải được trang bị SoapUIFiddler để tự mình thực hiện dịch vụ. Điều đầu tiên là với SoapUI có phiên bản Soap mà dịch vụ sử dụng, sẽ xác định loại ràng buộc bạn có thể sử dụng, trong trường hợp của tôi là Soap 1.1 và kết hợp với ws-security buộc tôi sử dụng customBinding vì wsHttpBinding chỉ hỗ trợ Soap 1.2 và basicBinding không linh hoạt khi sử dụng dịch vụ hỗ trợ WS-Security.
Sau các phiên kiểm tra lỗi và rất nhiều Fiddler để đọc các phản ứng máy chủ cuối cùng tôi đã đưa ra với các ràng buộc sau đây. Tất cả được thực hiện theo cấu hình, không có mã nào tham gia:

<system.serviceModel> 
    <bindings> 

     <binding name="MyBinding" >   
     <textMessageEncoding messageVersion="Soap11"/> 
     <security authenticationMode="MutualCertificate" enableUnsecuredResponse="true" allowSerializedSigningTokenOnReply="true" 
       messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" 
       includeTimestamp="false"> 
     </security> 
     <httpsTransport /> 
     </binding> 

     </customBinding> 


    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="ClientCertificateBehavior"> 
      <clientCredentials> 
      <clientCertificate findValue="xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx" 
           storeLocation="CurrentUser" storeName="My" 
           x509FindType="FindByThumbprint" /> 

      <serviceCertificate> 
       <defaultCertificate findValue="xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx" 
            storeLocation="CurrentUser" storeName="My" 
            x509FindType="FindByThumbprint"/> 
       <authentication certificateValidationMode="None" /> 
      </serviceCertificate> 
      </clientCredentials> 

     </behavior> 

     </endpointBehaviors> 

    </behaviors> 
    <client> 

     <endpoint address="https://secure.aduana.gov.py/test/tere/serviciotere" 
     binding="customBinding" bindingConfiguration="MyBinding" 
     contract="serviciotereSoap" name="serviciotereSoap" behaviorConfiguration="ClientCertificateBehavior"> 
     <identity> 
      <dns value="tere_test"/> 
     </identity> 
     </endpoint> 

    </client> 
    </system.serviceModel> 

. Thay thế xx bằng chứng chỉ của bạn Thumbprint hex values) . Tài nguyên đã giúp tôi sắp xếp các vấn đề khác nhau: thishere

+7

Đừng đổ lỗi cho các nhà phát triển java vì họ không hài hước. Hãy tưởng tượng nếu ai đó lấy C# và xóa thuộc tính, đại biểu, sự kiện, LINQ, lambdas, async/await, generics thích hợp, loại giá trị và hầu hết các tính năng ngôn ngữ tuyệt vời khác mà bạn sử dụng hàng ngày và buộc bạn phải viết mã mà không có chúng. Bạn cũng đang ở trong một tâm trạng xấu, và có lẽ không sẵn lòng giúp đỡ bất cứ ai;) –

+0

Oh @HighCore lần nữa bạn là đúng – Diane

+0

Bạn là anh hùng của tôi! –

Các vấn đề liên quan