В настоящее время я работаю над функцией единого входа для клиента.
Наше приложение, если в этом есть необходимость, выполнит аутентификацию с использованием функции единого входа при запуске и прекратит работу в случае сбоя.
Я прочитал много объяснений и видел много примеров в Интернете.
То, что я совсем не понимаю, это сертификаты. В частности, кажется, что в операции используются два (разных?) Сертификата. Один из них хранится на моей стороне как константа, а другой отправляется в ответе SAML в элементе подписи следующим образом:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#id-2710abae3b0457ad0c241eac043769ae78c83189">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>???</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#id-266b413f5282d3da62de3963e5e25cb0782e1a05">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>???</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>???</ds:SignatureValue>
<ds:KeyInfo Id="id-266b413f5282d3da62de3963e5e25cb0782e1a05">
<ds:X509Data>
<ds:X509Certificate>???</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
Поля, помеченные как "???" клиент не дал мне в образце ответа.
Что касается другого сертификата, хороший пример этого будет здесь: https://github.com/onelogin/dotnet-saml в "App_Code / AccountSettings.cs".
Кроме того, в XML есть также подпись и два поля "DigestValue", которые, как представляется, также содержат данные Base64 в других онлайн-примерах.
Итак, мой вопрос: является ли локальный сертификат таким же, как у xml, и если нет, то как именно они связаны, и имеют ли отношение подпись и DigestValues в этих отношениях?
Что касается контекста, я пытаюсь протестировать свою функцию единого входа, и, похоже, все работает, кроме сертификата, который я не могу понять, как тестировать без реальных значений. Это может быть подделано? SignedXml.CheckSignature всегда возвращает false независимо от того, что я поместил в XML, даже «реальные» примеры (найденные в Интернете).