http-getでxml、signature、signature-algoirthmを別々に取得しています。 だから、どうやって署名を検証するのですか?http-redirect samlresponse uriリクエストの確認方法
は、現在、私のコードはこれです:
public void CheckSignature(string response, string sig, string sigalg, byte[] cert)
{
Log("loading cert");
X509Certificate2 cert2 = new X509Certificate2(cert);
bool result = false;
/* response, sigalg and sig are url-decoded or not, doesn't matter :(*/
Log("first variant");
var signedString = string.Format(CultureInfo.InvariantCulture, "SAMLResponse={0}&SigAlg={1}", response, sigalg);
result = DoCheck(signedString, sigalg, sig, cert2);
Log("2nd variant");
signedString = string.Format(CultureInfo.InvariantCulture, "SAMLResponse={0}", response);
result = DoCheck(signedString, sigalg, sig, cert2);
Log("3rd variant");
signedString = string.Format(CultureInfo.InvariantCulture, "{0}", response);
result = DoCheck(signedString, sigalg, sig, cert2);
}
private bool DoCheck(string signedString, string sigalg, string sig, X509Certificate2 cert2)
{
try {
var sigDescription = (SignatureDescription)CryptoConfig.CreateFromName(sigalg);
var hashAlg = sigDescription.CreateDigest();
//why is this needed?
hashAlg.ComputeHash(Encoding.UTF8.GetBytes(signedString));
var signature = Convert.FromBase64String(sig);
Log("trying to verify::" + signedString + Environment.NewLine);
X509AsymmetricSecurityKey key = new X509AsymmetricSecurityKey(cert2);
AsymmetricAlgorithm asym_alg = key.GetAsymmetricAlgorithm(sigalg, false);
AsymmetricSignatureDeformatter def = sigDescription.CreateDeformatter(asym_alg);
bool result = false;
result = def.VerifySignature(hashAlg, signature);
//sadly always false.
Log("woop woop:" + result);
return result;
}
catch (Exception ex) {
Log(ex.Message);
Log(ex.StackTrace);
}
return false;
}
今のところ、私は何でも、結果は常にfalseです。 あなたが結合SAML2 HTTPリダイレクトを使用してメッセージを取得しているフォームSAMLResponse=....SigAlg=...Signature=...
(最初のパラメータもSAMLRequest
することができます)上のクエリ文字列を取得する場合https://github.com/KentorIT/authservices/blob/master/Kentor.AuthServices/WebSSO/Saml2RedirectBinding.cs
まあ、私はそれが仕様でどのように機能するかを理解する..しかし、オープンソースの実装では、私の特定の目的のために文書化安っぽい/適していません。 – Mafti
具体的な目的がある場合は、それらの目的を質問に含めないでください。それはより良い応答を得るのに役立ちます。 –
こんにちは、曖昧さをお詫び申し上げます。私の現在のコードを追加しました。私はあなたのコードbtwとしてhttprequestdataを得ることができるかどうかわからない。 – Mafti