簡體   English   中英

身份驗證 Soap Api 標頭 c#

[英]Authentication Soap Api Header c#

我正在嘗試調用soap api,但無法進行身份驗證。 api 應該在標題中接收這樣的 xml:

<wsse:Security>
   <wsse:UsernameToken>
      <wsse:Username>XXXXXXXXX</Username>
      <wsse:Password>XXXXXXXXX</Password>
   </wsse:UsernameToken>
</wsse:Security>

但我不明白如何通過它,我試圖以這種方式插入憑證:

    client.ClientCredentials.UserName.UserName = "XXXXXXXXX";
    client.ClientCredentials.UserName.Password = "XXXXXXXXX";

然后以這種方式構建活頁夾:

    BasicHttpsBinding bindingHttps = new BasicHttpsBinding();
    bindingHttps.Security.Mode = BasicHttpsSecurityMode.Transport;
    bindingHttps.MaxReceivedMessageSize = 500000000; 
    bindingHttps.SendTimeout = new TimeSpan(0, 5, 0);

但調用返回此錯誤: System.AggregateException: '發生一個或多個錯誤。 (錯誤:UsernameToken 不存在)'

嘗試以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


//This is Xml  you need to generate
//<? xml version = "1.0" ?>
//<soapenv:Envelope xmlns:wsse="http://schemas.xmlsoap.org/soap/envelope/" >
//      <wsse:Header >
//          <wsse:Security >
//              <wsse:UsernameToken >
//                  <wsse:Username > XXXXXXXXX </ Username >
//                  <wsse:Password > XXXXXXXXX </ Password >
//              </wsse:UsernameToken >
//          </wsse:Security >
//      </wsse:Header >
//      <wsse:Body >
//         <yourbodygoeshere >
//      </wsse:Body >
//</wsse:Envelope >


namespace ConsoleApplication23
{

    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            string username = "John";
            string password = "1234567890";

            string ident = "<?xml version=\"1.0\"?><wsse:Envelope xmlns:wsse=\"http://schemas.xmlsoap.org/soap/envelope/\"></wsse:Envelope>";
            XDocument doc = XDocument.Parse(ident);
            XElement envelope = doc.Root;
            XNamespace wsseNs = envelope.GetNamespaceOfPrefix("wsse");
            XElement header = new XElement(wsseNs + "Header");
            envelope.Add(header);
            XElement security = new XElement(wsseNs + "Security",
                new XElement(wsseNs + "UsernameToken",
                   new XElement(wsseNs + "Username", username),
                   new XElement(wsseNs + "Password", password)
                )
             );
            header.Add(security);

            XElement body = new XElement(wsseNs + "Body");
            envelope.Add(body);


        }
    }
  
}

如果我以這種方式使用構建器,它可以工作。

var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM