private static void Serialize(SamlSubjectConfirmation subjectConfirmation, XmlDocument document, XmlNode root) { if (subjectConfirmation == null) { throw new ArgumentNullException(nameof(subjectConfirmation)); } if (document == null) { throw new ArgumentNullException(nameof(document)); } if (root == null) { throw new ArgumentNullException(nameof(root)); } var subjectConfirmationNode = document.CreateElement(Constants.XmlPrefixes.Saml, Constants.XmlRootNames.SamlSubjectConfirmation, Constants.XmlNamespaces.Saml); var confirmationMethodNode = document.CreateElement(Constants.XmlPrefixes.Saml, Constants.XmlRootNames.SamlConfirmationMethod, Constants.XmlNamespaces.Saml); var keyInfoNode = document.CreateElement(Constants.XmlPrefixes.Ds, Constants.XmlRootNames.KeyInfo, Constants.XmlNamespaces.Ds); var x509DataNode = document.CreateElement(Constants.XmlPrefixes.Ds, Constants.XmlRootNames.X509Data, Constants.XmlNamespaces.Ds); var x509CertificateNode = document.CreateElement(Constants.XmlPrefixes.Ds, Constants.XmlRootNames.X509Certificate, Constants.XmlNamespaces.Ds); x509CertificateNode.InnerText = Convert.ToBase64String(subjectConfirmation.Certificate.Export(System.Security.Cryptography.X509Certificates.X509ContentType.Cert)); confirmationMethodNode.InnerText = subjectConfirmation.Method; x509DataNode.AppendChild(x509CertificateNode); keyInfoNode.AppendChild(x509DataNode); subjectConfirmationNode.AppendChild(confirmationMethodNode); Serialize(subjectConfirmation.SubjectConfirmationData, document, subjectConfirmationNode); subjectConfirmationNode.AppendChild(keyInfoNode); root.AppendChild(subjectConfirmationNode); }
public SoapEnvelope Build() { CheckInit(); var samlAssertionId = GenerateId("assertion"); var requestId = GenerateId("request"); var bodyId = GenerateId("id"); var timeStampId = GenerateId("TS"); var x509Id = GenerateId("X509"); var ssin = GetSsin(_x509Certificate.Subject); if (string.IsNullOrWhiteSpace(ssin)) { throw new EhealthException(Constants.ErrorCodes.NoSerialNumber); } var identitySubject = ParseSubject(_x509Certificate.Subject); var issuerSubject = ParseSubject(_x509Certificate.Issuer); _samlAttributes.Add(new SamlAttribute(Constants.EhealthStsNames.SsinCertHolderAttributeName, Constants.EhealthStsNames.SsinAttributeNamespace, ssin)); _samlAttributes.Add(new SamlAttribute(Constants.EhealthStsNames.SsinAttributeName, Constants.EhealthStsNames.SsinAttributeNamespace, ssin)); _samlAttributeDesignators.Add(new SamlAttributeDesignator(Constants.EhealthStsNames.SsinCertHolderAttributeName, Constants.EhealthStsNames.SsinAttributeNamespace)); _samlAttributeDesignators.Add(new SamlAttributeDesignator(Constants.EhealthStsNames.SsinAttributeName, Constants.EhealthStsNames.SsinAttributeNamespace)); var issueInstant = DateTime.Now; var samlNameIdentifier = new SamlNameIdentifier( Constants.EhealthStsNames.NameIdentifierFormat, issuerSubject, identitySubject); var samlSubject = new SamlSubject(samlNameIdentifier); var samlConditions = new SamlConditions(issueInstant); var samlAttributeStatement = new SamlAttributeStatement(samlSubject, _samlAttributes); var samlAssertion = new SamlAssertion(samlAssertionId, issueInstant, identitySubject, samlConditions, samlAttributeStatement); var subjectConfirmationData = new SamlSubjectConfirmationData(samlAssertion); var subjectConfirmation = new SamlSubjectConfirmation(Constants.EhealthStsNames.SubjectConfirmationMethod, _x509Certificate, subjectConfirmationData); var samlSubjectO = new SamlSubject(samlNameIdentifier, subjectConfirmation); var samlAttributeQuery = new SamlAttributeQuery(samlSubjectO, _samlAttributeDesignators); var samlRequest = new SamlRequest(requestId, samlAttributeQuery); var body = new SoapBody(samlRequest, bodyId); var soapSecurity = new SoapSecurity(DateTime.UtcNow, timeStampId, x509Id, _x509Certificate); var header = new SoapHeader(soapSecurity); var soapEnvelope = new SoapEnvelope(header, body); return(soapEnvelope); }
public SamlSubject(SamlNameIdentifier nameIdentifier, SamlSubjectConfirmation subjectConfirmation) { NameIdentifier = nameIdentifier; SubjectConfirmation = subjectConfirmation; }