private static XmlDsigExcC14NTransform BuildC14(CanonicalizationMethods canonicalizationMethod) { switch (canonicalizationMethod) { case CanonicalizationMethods.C14WithComments: return(new XmlDsigExcC14NWithCommentsTransform()); default: return(new XmlDsigExcC14NTransform()); } }
/// <summary> /// Sign and build. /// </summary> /// <param name="certificate"></param> /// <param name="digestMethod"></param> /// <param name="canonicalizationMethod"></param> /// <returns></returns> public ResponseType SignAndBuild(X509Certificate2 certificate, SignatureAlgorithms signatureAlgorithm, CanonicalizationMethods canonicalizationMethod) { foreach (var assertion in _response.Items.Where(i => i is AssertionType).Cast <AssertionType>()) { var assertionSigned = new SamlSignedRequest(assertion.SerializeToXmlElement(), certificate, signatureAlgorithm, canonicalizationMethod); assertionSigned.ComputeSignature(assertion.ID); var assertionSignature = assertionSigned.GetXml().OuterXml.DeserializeXml <SignatureType>(); assertion.Signature = assertionSignature; } var signedRequest = new SamlSignedRequest(_response.SerializeToXmlElement(), certificate, signatureAlgorithm, canonicalizationMethod); signedRequest.ComputeSignature(_response.ID); var signature = signedRequest.GetXml().OuterXml.DeserializeXml <SignatureType>(); _response.Signature = signature; return(_response); }
internal SamlSignedRequest(XmlElement xmlElement, X509Certificate2 certificate, SignatureAlgorithms signatureAlgorithm, CanonicalizationMethods canonicalizationMethod) : base(xmlElement) { _certificate = certificate; _signatureAlgorithm = signatureAlgorithm; _canonicalizationMethod = canonicalizationMethod; }
/// <summary> /// Sign and build. /// </summary> /// <param name="certificate"></param> /// <param name="digestMethod"></param> /// <param name="canonicalizationMethod"></param> /// <returns></returns> public XmlElement SignAndBuild(X509Certificate2 certificate, SignatureAlgorithms signatureAlgorithm, CanonicalizationMethods canonicalizationMethod) { var xmlDocument = _authRequest.SerializeToXmlDocument(); var signedRequest = new SamlSignedRequest(xmlDocument.DocumentElement, certificate, signatureAlgorithm, canonicalizationMethod); signedRequest.ComputeSignature(_authRequest.ID); var issuer = xmlDocument.DocumentElement.GetElementsByTagName("//Issuer", "urn:oasis:names:tc:SAML:2.0:assertion")[0] as XmlElement; xmlDocument.DocumentElement.InsertAfter(xmlDocument.ImportNode(signedRequest.GetXml(), true), issuer); return(xmlDocument.DocumentElement); }