private Saml2Response(XmlDocument xml) { xmlDocument = xml; id = new Saml2Id(xml.DocumentElement.Attributes["ID"].Value); var parsedInResponseTo = xml.DocumentElement.Attributes["InResponseTo"].GetValueIfNotNull(); if (parsedInResponseTo != null) { inResponseTo = new Saml2Id(parsedInResponseTo); } issueInstant = DateTime.Parse(xml.DocumentElement.Attributes["IssueInstant"].Value, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); var statusString = xml.DocumentElement["Status", Saml2Namespaces.Saml2PName] ["StatusCode", Saml2Namespaces.Saml2PName].Attributes["Value"].Value; status = StatusCodeHelper.FromString(statusString); issuer = xmlDocument.DocumentElement["Issuer", Saml2Namespaces.Saml2Name].GetTrimmedTextIfNotNull(); var destinationUriString = xmlDocument.DocumentElement.Attributes["Destination"].GetValueIfNotNull(); if (destinationUriString != null) { destinationUri = new Uri(destinationUriString); } }
private Saml2Response(XmlDocument xml) { xmlDocument = xml; id = xml.DocumentElement.Attributes["ID"].Value; issueInstant = DateTime.Parse(xml.DocumentElement.Attributes["IssueInstant"].Value, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); var statusString = xml.DocumentElement["Status", Saml2Namespaces.Saml2PName] ["StatusCode", Saml2Namespaces.Saml2PName].Attributes["Value"].Value; status = StatusCodeHelper.FromString(statusString); }
private void CreateXmlDocument() { var xml = new XmlDocument(); xml.AppendChild(xml.CreateXmlDeclaration("1.0", null, null)); var responseElement = xml.CreateElement("saml2p", "Response", Saml2Namespaces.Saml2PName); if (DestinationUri != null) { responseElement.SetAttributeNode("Destination", "").Value = DestinationUri.ToString(); } responseElement.SetAttributeNode("ID", "").Value = id.Value; responseElement.SetAttributeNode("Version", "").Value = "2.0"; responseElement.SetAttributeNode("IssueInstant", "").Value = DateTime.UtcNow.ToSaml2DateTimeString(); if (InResponseTo != null) { responseElement.SetAttributeNode("InResponseTo", "").Value = InResponseTo.Value; } xml.AppendChild(responseElement); var issuerElement = xml.CreateElement("saml2", "Issuer", Saml2Namespaces.Saml2Name); issuerElement.InnerText = issuer.Id; responseElement.AppendChild(issuerElement); var statusElement = xml.CreateElement("saml2p", "Status", Saml2Namespaces.Saml2PName); var statusCodeElement = xml.CreateElement("saml2p", "StatusCode", Saml2Namespaces.Saml2PName); statusCodeElement.SetAttributeNode("Value", "").Value = StatusCodeHelper.FromCode(Status); statusElement.AppendChild(statusCodeElement); responseElement.AppendChild(statusElement); foreach (var ci in claimsIdentities) { responseElement.AppendChild(xml.ReadNode( ci.ToSaml2Assertion(issuer).ToXElement().CreateReader())); } xmlDocument = xml; xml.Sign(issuerCertificate); }