Как добавить атрибут Nonce EncodingType в UsernameToken в веб-сервисе soap

У меня есть устаревшая веб-служба (.NET с использованием wse2), которая взаимодействует со сторонней веб-службой. Он генерирует UsernameToken, который до сих пор был приемлемым, но после обновления третьей стороной требует токен, содержащий атрибут EncodingType в элементе Nonce. Я пробовал несколько подходов из разных блогов, включая создание xml вручную и передачу его конструктору UsernameToken, но ничего не работает. Теперь у меня заканчиваются варианты и время. Может кто-нибудь подсказать, что я могу с этим сделать? Ниже приведен код, который я использую для создания UsernameToken вручную.

UsernameToken userToken;
            userToken = new UsernameToken(this.Security_RequestValue.Username, this.Security_RequestValue.Password, PasswordOption.SendPlainText);
            //string t = userToken.GetXml(doc).InnerXml;

            XmlElement testelem = doc.CreateElement("wsse", "UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
            XmlElement node = doc.CreateElement("wsse", "Username", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
            node.InnerText = this.Security_RequestValue.Username;
            testelem.AppendChild(node);
            node = doc.CreateElement("wsse", "Password", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
            node.SetAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
            node.InnerText = this.Security_RequestValue.Password;
            testelem.AppendChild(node);
            node = doc.CreateElement("wsse", "Nonce", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
            node.SetAttribute("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");

            //Nonce code
            var ByteArray = new byte[16];
            //Generate a cryptographically random set of bytes
            RandomNumberGenerator Rnd = RandomNumberGenerator.Create();
            Rnd.GetBytes(ByteArray);

            node.InnerText = Convert.ToBase64String(ByteArray);//"SQ0jlkABaORKgqwpewTVPQ==";
            testelem.AppendChild(node);
            node = doc.CreateElement("wsu", "Created", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
            CultureInfo provider = CultureInfo.InvariantCulture;
            node.InnerText = DateTime.UtcNow.ToLocalTime().ToString("yyyy-MM-ddTHH:mm:ssZ");
            testelem.AppendChild(node);

            userToken = new UsernameToken(testelem);

0 ответов

Другие вопросы по тегам