Ich habe einen privaten Schlüssel, einen öffentlichen Schlüssel und ein Zertifikat bekommen, um eine Signatur für eine SSO-Anwendung zu erstellen. Ich habe schon eine Weile mit diesem Problem zu kämpfen und ich glaube, dass ich es endlich geschafft habe etwas Code, der bei Bedarf funktioniert. Ich habe vor einer Weile hier einen Eintrag gemacht: iDP connecting to SP SAML/SSO was mir geholfen hat, in die richtige Richtung zu kommen.Generieren der Assertion-Signatur mit privatem Schlüssel und Zertifikat?
Allerdings bin ich immer noch unsicher, wie ich diese Signatur signieren wollte, der ganze Code, den ich zu sagen scheint, muss ich verwenden .Net-Klasse X509Certificate, die in der Regel versucht, eine andere Datei zu laden, aber das Zertifikat ist in der Zusicherungsdatei selbst.
<ds:X509Data>
<ds:X509Certificate>X509Certificate Goes Here</ds:X509Certificate>
</ds:X509Data>
Ich habe diese Methode hier:
private SignedXml SignSignature(XmlDocument assertionDoc, string uri, string digest)
{
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);
SignedXml signedXml = new SignedXml(assertionDoc);
Reference reference = new Reference();
signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;
signedXml.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA1Url;
reference.Uri = uri;
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
reference.AddTransform(new XmlDsigExcC14NTransform());
reference.DigestMethod = SignedXml.XmlDsigSHA1Url;
reference.DigestValue = Encoding.ASCII.GetBytes(digest);
signedXml.AddReference(reference);
signedXml.SigningKey = rsaKey;
HMACSHA256 key = new HMACSHA256(Encoding.ASCII.GetBytes(PrivateKey));
signedXml.ComputeSignature(key);
return signedXml;
}
Was ist das, was ich SignatureValue das Dokuments zu unterzeichnen verwenden, aber bin ich nur Gebrauch des privaten Schlüssels in der SHA256-Klasse zu machen und nicht die Ich bin mir nicht einmal sicher, ob ich den privaten Schlüssel richtig verwende, insgesamt denke ich, dass ich das komplizierter mache, als es sein muss und hoffentlich kann mir jemand von hier helfen.