我需要向使用HTTPS端点发送到我项目中的一个Connected Services的每个有效负载添加一个自定义标头。该自定义标头将用作对接收者的身份验证。我该怎么办?
我尝试使用System.ServiceModel.Channels.MessageHeader
和AddressHeader
时不走运。使用SoapUI,向请求中添加自定义标头即可正常工作。
此身份验证方法对于接收者来说是新的。同样是HTTPS端点。在以前的请求中,我使用的是Basic Http Authentication
和用户名和密码。因此,为了支持HTTPS绑定代码,我对此进行了一些更改:
BasicHttpsBinding basicAuthBinding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
basicAuthBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
EndpointAddress basicAuthEndpoint = new EndpointAddress("https://whatever");
MyConnectedService.MyOperationClient client = new MyConnectedService.MyOperationClient(basicAuthBinding, basicAuthEndpoint);
client.ClientCredentials.UserName.UserName = "user";
client.ClientCredentials.UserName.Password = "pass";
client.send(payload);
我相信我需要在此处添加自定义标头。
使用此代码,我得到了预期的HTTP 401 - Unauthorized
。
帮助表示赞赏。
谢谢。
答案 0 :(得分:0)
如果您接受静态自定义标头,则可以尝试使用web.config(app.config)。
<endpoint address="http://ws-wuxipc-5077:4000/calculator" binding="basicHttpBinding"
contract="ServiceInterface.CustomHeader" name="header">
<headers>
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" >
<wsse:UsernameToken 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">
<wsse:Username>
</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">monMonDePasse</wsse:Password>
<wsse:Nonce>sdsdsdlojhfdsdM5Nw==</wsse:Nonce>
<wsu:Created>2019-01-21T6:17:34Z</wsu:Created>
</wsse:UsernameToken>
</Security>
</headers>
</endpoint>