Мне нужен «BinarySecurityToken», когда я вызываю «SOAP Service», используя «. Net Core» - PullRequest
0 голосов
/ 26 марта 2020

Я хочу создать что-то вроде ниже:

<SOAP-ENV:Header>
  <wsse:Security SOAP-ENV:mustUnderstand="1">
    <wsse:BinarySecurityToken EncodingType="…#Base64Binary" ValueType="…#X509v3" wsu:Id="CertId-1776694">
      MIIDDDCCAfSgAwIBAgIQM6YEf7FVYx/tZyEXgVComTANBgkqhkiG9w0SDGBSDJHBK34...
    </wsse:BinarySecurityToken> 
    <ds:Signature>
      <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-1464350">
          <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">1JmC1C0FrlPB42xfFKolgaCew5k=</ds:DigestValue> 
        </ds:Reference>
      </ds:SignedInfo>
      <ds:SignatureValue">
        H1b7jH2bHpbrzJXkFS0msdUYycDMH4n6m4oTRtbo4Yk35/JzGcuwUYZ3...
      </ds:SignatureValue>
      <ds:KeyInfo>
        <wsse:SecurityTokenReference wsu:Id="STRId-13498124">
          <wsse:Reference URI="#CertId-1776694" ValueType="…#X509v3" /> 
        </wsse:SecurityTokenReference>
      </ds:KeyInfo>
    </ds:Signature>
  </wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body wsu:Id="id-1464350">
  ...
</SOAP-ENV:Body>

У меня есть следующий код:

OperationsClient client = new OperationsClient();
var response = await client.MarketInfoAsync(request);

...

internal partial class OperationsClient
{
  static partial void ConfigureEndpoint(ServiceEndpoint serviceEndpoint, ClientCredentials clientCredentials)
  {
    serviceEndpoint.Address = new EndpointAddress("https://testmisapi.ercot.com/2007-08/Nodal/eEDS/EWS/");

    (serviceEndpoint.Binding as BasicHttpBinding).Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
    (serviceEndpoint.Binding as BasicHttpBinding).Security.Mode = BasicHttpSecurityMode.Transport;

    clientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, 509FindType.FindBySerialNumber, "XXXXX");                                            
  }
}

Я получаю сообщение об ошибке:

SECU1075 : Обнаружена ошибка при обработке заголовка < wsse: Security >

Я попытался изменить это:

(serviceEndpoint.Binding as BasicHttpBinding).Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
(serviceEndpoint.Binding as BasicHttpBinding).Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;

Но в этом случае я получаю следующую ошибку:

Не удалось установить sh доверительные отношения для безопасного канала SSL / TLS с полномочиями 'testmisapi.ercot.com'.

Я прочитал, что могу использовать IClientMessageInspector но я не знаю, как добавить полный заголовок Security.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...