public override CommandResult Bind(ISaml2Message message, ILoggerAdapter logger) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var messageXml = message.ToXml(); logger?.WriteVerbose("Sending message over Http Redirect Binding\n" + messageXml); var serializedRequest = Serialize(messageXml); var queryString = message.MessageName + "=" + serializedRequest + (string.IsNullOrEmpty(message.RelayState) ? "" : ("&RelayState=" + Uri.EscapeDataString(message.RelayState))); if (message.SigningCertificate != null) { queryString = AddSignature(queryString, message); } var redirectUri = new Uri(message.DestinationUrl.ToString() + (string.IsNullOrEmpty(message.DestinationUrl.Query) ? "?" : "&") + queryString); return(new CommandResult() { HttpStatusCode = HttpStatusCode.SeeOther, Location = redirectUri }); }
public override CommandResult Bind(ISaml2Message message, ILoggerAdapter logger) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var xml = message.ToXml(); if (message.SigningCertificate != null) { var xmlDoc = new XmlDocument() { PreserveWhitespace = true }; xmlDoc.LoadXml(xml); xmlDoc.Sign(message.SigningCertificate, true, message.SigningAlgorithm); xml = xmlDoc.OuterXml; } logger?.WriteVerbose("Sending message over Http POST binding\n" + xml); var encodedXml = Convert.ToBase64String(Encoding.UTF8.GetBytes(xml)); var relayStateHtml = string.IsNullOrEmpty(message.RelayState) ? null : string.Format(CultureInfo.InvariantCulture, PostHtmlRelayStateFormatString, message.RelayState); var cr = new CommandResult() { ContentType = "text/html", Content = String.Format( CultureInfo.InvariantCulture, PostHtmlFormatString, message.DestinationUrl, relayStateHtml, message.MessageName, encodedXml) }; return(cr); }
public override CommandResult Bind <TMessage>( TMessage message, ILoggerAdapter logger, Action <TMessage, XDocument, Saml2BindingType> xmlCreatedNotification) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var xml = message.ToXml(xd => xmlCreatedNotification?.Invoke(message, xd, Saml2BindingType.HttpPost)); if (message.SigningCertificate != null) { var xmlDoc = XmlHelpers.XmlDocumentFromString(xml); xmlDoc.Sign(message.SigningCertificate, true, message.SigningAlgorithm); xml = xmlDoc.OuterXml; } logger?.WriteVerbose("Sending message over Http POST binding\n" + xml); var encodedXml = Convert.ToBase64String(Encoding.UTF8.GetBytes(xml)); var relayStateHtml = string.IsNullOrEmpty(message.RelayState) ? null : string.Format(CultureInfo.InvariantCulture, PostHtmlRelayStateFormatString, message.RelayState); var cr = new CommandResult() { ContentType = "text/html", Content = string.Format( CultureInfo.InvariantCulture, PostHtmlFormatString, message.DestinationUrl, relayStateHtml, message.MessageName, encodedXml) }; return(cr); }