K.M.Rasmussen
K.M.Rasmussen

Reputation: 19

Setting up WSSE for WCF service

I´m looking for a way to add the following WSSE XML data into a SOAP request to a service:

<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:UsernameToken wsu:Id="UsernameToken-D67150EFEFE71BA23416294396650191">
            <wsse:Username>XXXXXXX</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXXXX</wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">XXXXXXX</wsse:Nonce>
            <wsu:Created>2021-08-20T06:07:45.015Z</wsu:Created>
        </wsse:UsernameToken>
    </wsse:Security>
</soapenv:Header>

I´ve added the service as a service reference in VS 2017 and I´ve seen suggestion that points to app.config like

        <bindings>
            <basicHttpBinding>
                <binding name="myBinding">
                  <security mode="TransportWithMessageCredential" >
                    <message clientCredentialType="UserName" />
                  </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="https://...."
              binding="basicHttpBinding" bindingConfiguration="myBinding"
              contract="..." name="..." >
            <headers>
              <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                <wsse:UsernameToken>
                  <wsse:Username>XXX</wsse:Username>
                  <wsse:Password Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'>XXX</wsse:Password>
                </wsse:UsernameToken>
              </wsse:Security>
            </headers>
          </endpoint>
        </client>

And suggestion using BasicHttpBinding like

var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

var endpoint = new EndpointAddress("https://....");

using (var client = new ServiceReference1.Client(binding, endpoint))
{
    client.ClientCredentials.UserName.UserName = "XYZ";
    client.ClientCredentials.UserName.Password = "XYZ";

    ServiceReference1.Request request = new ServiceReference1.Request();

    request.Request = new ServiceReference1.RequestType();
    request.Request.Nr = "12345";

    ServiceReference1.Response response = client.getData(request);
    ServiceReference1.ResponseType[] responseMessages = response.Response;
}

But I´ve been unable to get anything working. The username and password have been tested via SoapUI.

Any suggestions?

Regards Kaare

Upvotes: 0

Views: 827

Answers (0)

Related Questions