none
Как временно отключить проверку подписи в сообщении WCF RRS feed

  • Общие обсуждения

  • Добрый день, коллеги.

    Подскажите как решить вопрос.

    Есть контракт

        [ServiceContract(Namespace = "http://idecs.atc.ru/orderprocessing/ws/eventservice/v25/", Name = "EventService", ProtectionLevel = ProtectionLevel.Sign)]
        public interface IEventService
        {
            [OperationContract(Action = "pushEvent")]
            [XmlSerializerFormat]
            RequestResponse PushEvent(Request request);
        }

    От клиента приходит сообщение, которое содержит подпись.

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:smev="http://smev.gosuslugi.ru/rev120315" xmlns:v25="http://idecs.atc.ru/orderprocessing/ws/eventservice/v25/" xmlns:inc="http://www.w3.org/2004/08/xop/include" xmlns:soc="http://socit.ru" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <soap:Header>
        <wsse:Security soap:actor="http://smev.gosuslugi.ru/actors/smev">
          <ds:Signature><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" /><ds:Reference URI="#body"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" /><ds:DigestValue>cf4UQotV02TI4bGbWoyRPg7yb/wzfUEfI2bLFfOfRmg=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>J65C8/O/f5zhqlZWpek39IMGI49gtQj5JdXVG060iYs3TXtq9j6IJvZSdeGkUkBGDiFhnKZVtqwuXgfJu47XsQ==</ds:SignatureValue><ds:KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#SenderCertificate" /></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature>
          <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="SenderCertificate">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</wsse:BinarySecurityToken>
    </wsse:Security>
    </soap:Header>
    
      <soap:Body wsu:Id="body">
        <v25:pushEventRequest>
          <smev:Message>
            <smev:Sender>
              <smev:Code>SOCP01711</smev:Code>
              <smev:Name>СОЦИНФОРМТЕХ</smev:Name>
            </smev:Sender>
            <smev:Recipient>
              <smev:Code>01TV01141</smev:Code>
              <smev:Name>МФЦ РС(Я)</smev:Name>
            </smev:Recipient>
            <smev:Originator>
              <smev:Code>01TV01141</smev:Code>
              <smev:Name>МФЦ РС(Я)</smev:Name>
            </smev:Originator>
            <smev:TypeCode>GSRV</smev:TypeCode>
            <smev:Status>RESULT</smev:Status>
            <smev:Date>2015-05-25T14:26:23.669+03:00</smev:Date>
            <smev:ExchangeType>1</smev:ExchangeType>
            <smev:RequestIdRef>MyID_0df6723e-8a8c-440d-bcec-73f8f94edc95</smev:RequestIdRef>
            <smev:OriginRequestIdRef>MyID_0df6723e-8a8c-440d-bcec-73f8f94edc95</smev:OriginRequestIdRef>
            <smev:ServiceCode>123456789</smev:ServiceCode>
            <smev:CaseNumber>1030</smev:CaseNumber>
          </smev:Message>
          <smev:MessageData>
            <smev:AppData>
              <orderId>1030</orderId>
              <eventComment>Уважаемый заявитель! Ваше заявление было рассмотрено, в назначении выплаты Вам отказано, т.к. Вы не приложили свидельство о рождении ребенка. Зарегистрируйте новое заявление на РПГУ и приложите документы: ...., .....
    
    </eventComment>
              <eventAuthor></eventAuthor>
              <event>
                <orderStatusEvent>
                  <statusCode>
                    <techCode>4</techCode>
                  </statusCode>
                </orderStatusEvent>
              </event>
            </smev:AppData>
          </smev:MessageData>
        </v25:pushEventRequest>
      </soap:Body>
    </soap:Envelope>
    При проверке сервисом http://smev.gosuslugi.ru/portal/services-tools.jsp - всё ОК.

    При проверке подписи с помощью инфраструктуры WCF, получаем ошибку:

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
       <s:Body>
          <s:Fault>
             <faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode>
             <faultstring xml:lang="ru-RU">An error occurred when verifying security for the message.</faultstring>
          </s:Fault>
       </s:Body>
    </s:Envelope>

    Посмотрел исключение глубже:

    Cannot resolve KeyInfo for verifying signature: KeyInfo 'SecurityKeyIdentifier
        (
        IsReadOnly = False,
        Count = 1,
        Clause[0] = LocalIdKeyIdentifierClause(LocalId = 'SenderCertificate', Owner = '')
        )
    ', available tokens 'SecurityTokenResolver
        (
        TokenCount = 0,
        )
    '.

    Конечно же лучше решить эту проблему. Но я понять не могу, что не так. Я написал код, проверяющий подпись, и вроде подпись нормальная. Как проверяет подпись инфраструктура WCF я так и не понял, хотя рассмотрел много расширений.

    Как вариант - временно отключить проверку подписи. Но как я опять не понял :(

    ЗЫ Как вложить примеры запросов?


Все ответы

  • Я понимаю, что вопрос уже неактуален, но для тех, кто случайно набрел на этот сайт. Для отключения подписи нужно для ServiceContract и OperationContract прописать

    ProtectionLevel = ProtectionLevel.None
    И к конечной точке привязать биндинг
    <basicHttpBinding>
            <binding name="BasicHttpBinding_Simple" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:05:00" sendTimeout="00:05:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>


    • Изменено Amanuiel 31 мая 2016 г. 7:44