我正在尝试将WSSE SOAP Header添加到我的服务调用中,但大多数示例都集中在WCF上。我没有使用WCF。我添加了一个Web引用(WSDL)。
我尝试了各种方法但没有成功,比如 - 覆盖GetWebRequest方法:
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
string user = "username";
string pwd = "password";
System.Net.WebRequest request = base.GetWebRequest(uri);
string auth = string.Format("Basic {0}", Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(string.Format("{0}:{1}", user, pwd))));
request.PreAuthenticate = true;
request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
request.Headers.Add(HttpRequestHeader.Authorization, auth);
return request;
}
WSSE安全标题应该类似于:
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<UsernameToken>
<Username>username</Username>
<Password>password</Password>
</UsernameToken>
</Security>
非常感谢提前! 亲切的问候,
答案 0 :(得分:5)
请参阅以下内容:
Why doesn’t my generated proxy class build WSSE elements into the SOAP request header?
How to add security header to a SOAP message?
提供了答案!
答案 1 :(得分:0)
尝试添加评论,但太长了...
第二个链接还可以吗?无论如何,这里不是链接,而是我认为的关键信息(如果链接确实消失了) - 将 System.Web.Services.Protocols.SoapHttpClientProtocol 替换为 Microsoft.Web.Services2.WebServicesClientProtocol(或 Microsoft.Web. Services3.WebServicesClientProtocol,如果这对你有用 - 我通过 nuget 找到了 services2)。我们需要更改类,因为 SoapHttpClientProtocol 中的请求方法是受保护的,因此很难(不可能?)调整任何请求细节。我假设如果您使用 WCF 生成代码,更改类会打开所有为您提供的可能性。如果您要添加用户名,那么您可能需要添加所有其他 SOAP 安全值,因此 Correct way communicate WSSE Usernametoken for SOAP webservice 是一个方便的参考。