署名済みアサーションも含む SAML 応答に署名する場合、次のことを行う必要があります。
A) アサーション署名なしで応答署名を生成します。次に、両方の署名が生成された後にアサーション署名を挿入します。
B) アサーション署名を生成し、応答署名を生成するときにそれを含めます。
C) 他に何か?
SAMLはひどいです。回答を読むたびに、ほぼ正しいです。ここに正しいアルゴリズムが抽出されています。
それでおしまい。SAML は完全にひどいものです。SAML の実装を悪夢にする小さな微妙な点がたくさんあります (XML のサブセットの正規形式 (アサーション) の計算など)。XML ドキュメントの XML バージョンも含まれていません。
私は実装を終えました。二度とこのような苦痛を味わうことはありません。
正解は B) だと思います。最初にアサーションに署名してから、署名されたアサーション データを含む応答に署名します。ただし、単一の発行者/エンティティ (STS/IDP/etc) が両方に署名している場合、アサーションに署名する本当の理由はありませんか? アサーション データを含むプロトコル メッセージ/応答に署名するだけです。これにより、SP での処理要件が削減されます。Web SSO の場合、アサーションとレスポンスに異なるエンティティが署名している場合に、両方の部分が署名されているのを見たことがあります。
両方に署名する場合は、最初にアサーションに署名し、次に応答に署名する必要があります。これは、応答の署名が応答の内容全体 (アサーションの署名を含む) に基づくためです。したがって、アサーションに 2 番目に署名すると、応答の署名が無効になります。
正解はBです。
アサート側がAを使用してSAML応答に署名する場合、証明書利用者はSAML応答を検証する前に、SAML応答の署名とSAMLアサーションの署名を削除する必要があります。SAMLコア仕様では、エンベロープ署名変換または排他的正規化変換以外の変換を使用して署名を生成してはならないことが規定されています。これらの2つの変換のいずれも、SAMLアサーションのシグネチャを削除できません。したがって、証明書利用者はSAML応答を検証できません。