Click here to Skip to main content
15,884,176 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am trying to consume a web service that requires message signing for authentication. i have Created the Web service request object and populated it with data.
I have also Created a signature token using the X.509 certificate.
The final aim is to apply the token to web service request so that a digital signature is created for the BODY of the request and that signature should get appended to the request object.
below is the code i am using to generate token :
C#
 public SecurityManager(string serviceActor, bool isClient, string clientActor)
        : base(serviceActor, isClient, clientActor)
    {

    }

    public override void SecureMessage(SoapEnvelope envelope, Security security)
    {
        // Get an X.509 certificate for signing the SOAP message.
        X509SecurityToken signatureToken = GetSecurityToken("subjectName");
        if (signatureToken == null)
        {
            throw new SecurityFault("Message Requirements could not be satisfied.");
        }

        // Add the X.509 certificate to the header.
        security.Tokens.Add(signatureToken);

        // Specify that the SOAP message is signed using this X.509
        // certifcate.
        MessageSignature sig = new MessageSignature(signatureToken);
        security.Elements.Add(sig);

        // Get an X.509 certificate for encrypting the SOAP message.
        X509SecurityToken encryptionToken = GetSecurityToken("subjectName");
        if (encryptionToken == null)
        {
            throw new SecurityFault("Message Requirements could not be satisfied.");
        }

        // Specify that the SOAP message is encrypted using 
        // this X.509 certificate.
        EncryptedData enc = new EncryptedData(encryptionToken);
        security.Elements.Add(enc);
    }

    public X509SecurityToken GetSecurityToken(string subjectName)
    {
        X509SecurityToken objX509SecurityToken = null;
        X509Store objX509Store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        objX509Store.Open(OpenFlags.ReadOnly);
        try
        {
            X509Certificate2Collection objX509Certificate2Collection = objX509Store.Certificates.Find(X509FindType.FindBySubjectName, subjectName, true);

            X509Certificate2 objX509Certificate2;
            if (objX509Certificate2Collection.Count == 1)
            {
                objX509Certificate2 = objX509Certificate2Collection[0];
                objX509SecurityToken = new X509SecurityToken(objX509Certificate2);
            }
            else
            {
                objX509SecurityToken = null;
            }
        }
        catch (Exception ex)
        {
            objX509SecurityToken = null;
        }
        finally
        {
            if (objX509Store != null)
                objX509Store.Close();
        }
        return objX509SecurityToken;
    }
}


below is the code i am using to create web service request:

C#
        ServiceClient objServiceClient = new ServiceClient();
objServiceClient.send();


I want to know how can i apply security token to my web service request.
Posted

1 solution

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900