how to add SOAP Security header

前端 未结 3 890
猫巷女王i
猫巷女王i 2021-02-04 16:08

I\'ve read a lot of articles and answers but I couldn\'t work it out.

I\'m using .NET Framework 4.0 on my project. So, I first added the WebService as a Service Referenc

3条回答
  •  花落未央
    2021-02-04 16:36

    Excelent post. All of you save my life!! I had to make some changes to get the following headers:

    
        
            EFO140714JPA
            SgBJAHMANwBBACYANQBOAG8ANwAzACEANgBrAGEAJgBIAGwAJABMAA==
            SgBJAHMANwBBACYANQBOAG8ANwAzACEANgBrAGEAJgBIAGwAJABMAA==
            2016-08-04T11:24:10.0Z
        
    
    

    Tha changes I made are the following:

            public class SoapSecurityHeader : MessageHeader
            {
                private readonly string _password, _username, _nonce, _createdDate;
    
                public SoapSecurityHeader(string id, string username, string password, string nonce, string created)
                {
                    _password = password;
                    _username = username;
                    _nonce = nonce;
                    _createdDate = created;
                    this.Id = id;
                }
    
                public string Id { get; set; }
    
                public override string Name
                {
                    get { return "Security"; }
                }
    
                public override string Namespace
                {
                    get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; }
                }
    
                protected override void OnWriteStartHeader(XmlDictionaryWriter writer, MessageVersion messageVersion)
                {
                    writer.WriteStartElement("wsse", Name, Namespace);
                    writer.WriteXmlnsAttribute("wsse", Namespace);
     ------->       writer.WriteXmlAttribute("mustUnderstand", "1");
                }
    
    
                protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
                {
                    writer.WriteStartElement("wsse", "UsernameToken", Namespace);
                    writer.WriteAttributeString("wsu:Id", "UsernameToken-15");
                    writer.WriteAttributeString("xmlns:wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
    
                    writer.WriteStartElement("wsse", "Username", Namespace);
                    writer.WriteValue(_username);
                    writer.WriteEndElement();
    
                    writer.WriteStartElement("wsse", "Password", Namespace);
      ----->        writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest");
                    writer.WriteValue(_password);
                    writer.WriteEndElement();
    
                    writer.WriteStartElement("wsse", "Nonce", Namespace);
                    writer.WriteValue(_nonce);
                    writer.WriteEndElement();
    
      ------>       writer.WriteStartElement("wsu:Created");
                    writer.WriteValue(_createdDate);
                    writer.WriteEndElement();
    
                    writer.WriteEndElement();
                }
            }
    

提交回复
热议问题