init
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Xml;
|
||||
|
||||
namespace Kreta.EESZTInterface.STS
|
||||
{
|
||||
partial class CreateSoap
|
||||
{
|
||||
public static XmlDocument CreateX509Soap(X509Certificate2 oamCert, X509Certificate2 cert)
|
||||
{
|
||||
XmlElement elem;
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.PreserveWhitespace = true;
|
||||
|
||||
string idBody = "Id-" + Guid.NewGuid().ToString().Replace("-", "");
|
||||
string idTs = "TS-" + Guid.NewGuid().ToString().Replace("-", "");
|
||||
string idX509 = "X509-" + Guid.NewGuid().ToString().Replace("-", "");
|
||||
string idOamCert = "OAM-" + Guid.NewGuid().ToString().Replace("-", "");
|
||||
|
||||
XmlElement root = xmlDoc.CreateElement("soap", "Envelope", Namespaces.soap12Ns);
|
||||
root.SetAttribute("xmlns:ns", Namespaces.nsNs);
|
||||
xmlDoc.AppendChild(root);
|
||||
|
||||
XmlElement head = xmlDoc.CreateElement("soap", "Header", Namespaces.soap12Ns);
|
||||
root.AppendChild(head);
|
||||
|
||||
XmlElement sec = xmlDoc.CreateElement("wsse", "Security", Namespaces.wsseNs);
|
||||
sec.SetAttribute("xmlns:wsu", Namespaces.wsuNs);
|
||||
head.AppendChild(sec);
|
||||
|
||||
XmlElement binary = xmlDoc.CreateElement("wsse", "BinarySecurityToken", Namespaces.wsseNs);
|
||||
binary.SetAttribute("Id", Namespaces.wsuNs, idOamCert);
|
||||
binary.SetAttribute("ValueType", STSValues.x509v3Value);
|
||||
binary.SetAttribute("EncodingType", STSValues.base64BinaryValue);
|
||||
binary.InnerText = CertificateHelper.CertToBase64String(oamCert);
|
||||
sec.AppendChild(binary);
|
||||
|
||||
binary = xmlDoc.CreateElement("wsse", "BinarySecurityToken", Namespaces.wsseNs);
|
||||
binary.SetAttribute("Id", Namespaces.wsuNs, idX509);
|
||||
binary.SetAttribute("ValueType", STSValues.x509v3Value);
|
||||
binary.SetAttribute("EncodingType", STSValues.base64BinaryValue);
|
||||
binary.InnerText = CertificateHelper.CertToBase64String(cert);
|
||||
sec.AppendChild(binary);
|
||||
|
||||
XmlElement timestamp = xmlDoc.CreateElement("wsu", "Timestamp", Namespaces.wsuNs);
|
||||
timestamp.SetAttribute("Id", Namespaces.wsuNs, idTs);
|
||||
sec.AppendChild(timestamp);
|
||||
|
||||
elem = xmlDoc.CreateElement("wsu", "Created", Namespaces.wsuNs);
|
||||
elem.InnerText = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ");
|
||||
timestamp.AppendChild(elem);
|
||||
|
||||
elem = xmlDoc.CreateElement("wsu", "Expires", Namespaces.wsuNs);
|
||||
elem.InnerText = DateTime.Now.AddHours(2).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ");
|
||||
timestamp.AppendChild(elem);
|
||||
|
||||
XmlElement body = xmlDoc.CreateElement("soap", "Body", Namespaces.soap12Ns);
|
||||
body.SetAttribute("xmlns:wsu", Namespaces.wsuNs);
|
||||
body.SetAttribute("Id", Namespaces.wsuNs, idBody);
|
||||
xmlDoc.DocumentElement.AppendChild(body);
|
||||
|
||||
XmlElement secToken = xmlDoc.CreateElement("ns", "RequestSecurityToken", Namespaces.nsNs);
|
||||
body.AppendChild(secToken);
|
||||
|
||||
elem = xmlDoc.CreateElement("ns", "RequestType", Namespaces.nsNs);
|
||||
elem.InnerText = STSValues.issueValue;
|
||||
secToken.AppendChild(elem);
|
||||
|
||||
elem = xmlDoc.CreateElement("ns", "TokenType", Namespaces.nsNs);
|
||||
elem.InnerText = STSValues.samlv2Value;
|
||||
secToken.AppendChild(elem);
|
||||
|
||||
var mem = new MemoryStream();
|
||||
xmlDoc.Save(mem);
|
||||
mem.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
xmlDoc = new XmlDocument
|
||||
{
|
||||
PreserveWhitespace = true
|
||||
};
|
||||
xmlDoc.Load(mem);
|
||||
|
||||
xmlDoc = SignHelper.SignMessage(xmlDoc, cert, "#" + idBody, "#" + idTs, "#" + idX509);
|
||||
|
||||
xmlDoc = EncryptHelper.EncryptMessage(xmlDoc, oamCert, "#" + idBody, "#" + idTs, "#" + idOamCert);
|
||||
|
||||
return xmlDoc;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user