証明書によって署名された ADFS から SAML2 トークンを生成しています。今、同じ証明書を使用して、その署名を検証しようとしています。
X509Certificate2 cert = LoadCert();
XmlDocument token = LoadXmlToken(); //SAML2 token
XmlElement signature = GetSignatureElement(token);
SignedXml signedXml = new SignedXml(token);
signedXml.LoadXml(signature);
bool result1 = signedXml.CheckSignature(); //true
bool result2 = signedXml.CheckSignature(cert, false); //false
CheckSignature() は、トークンに含まれる公開鍵に対して署名を検証します。CheckSignature(cert, [true/false]) は、証明書の秘密鍵に対して署名を検証します。
一方が機能し、他方が機能しないというのはどうしてでしょうか?