Этот вопрос показывает, где находится подпись в конверте в подписанном XML-документе.Существует разница между с конвертами и с конвертами .
Если вы начинаете с:
<saml:Assertion>
...
</saml:Assertion>
и подписываете этот документ на уровне корневого узла (Assertion
), вы создаете конверт , а не конверт в конверте, поскольку подпись содержит всю подписанную информацию.Вот почему, когда вы добавляете:
transforms.Add(new XmlDsigEnvelopedSignatureTransform());
, вы получаете:
Контекст XmlDocument необходим для конвертированных преобразований
как подпись в конверте требует, чтобы в качестве конверта использовалась XmlDocument
.
В конечном итоге то, что вы делаете, правильно, но в качестве теста, без полного SAML
Response
, вы видитеэта ошибка.На производстве Assertion
не будет отправлено само по себе, оно будет содержать XmlDocument
, такое как:
<saml:Response>
<saml:Assertion...
</saml:Assertion>
</saml:Response>
, а элемент <saml:Response>
обеспечит необходимый контекст XmlDocument
дляподпись для работы.
Чтобы пройти тест, заключите Assertion
в Response
и подпишите узел Assertion
, используя XmlDsigEnvelopedSignatureTransform
.