Как добавить атрибут 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);