[英]custom soap authentication header creation in c# sent via iPhone
[英]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.