Web服务请求身份验证

Ada*_*igh 2 c# authentication wcf web-services

我们真的被困在这里,所以我决定请你帮忙.

昨天我被要求帮助使用Web服务,获取WSDL的URL以及要使用的用户凭据.我从来没有真正与Web服务有任何关系,但对它们有一个大概的想法并看到一些例子,我认为它不会那么糟糕.显然我错了,因为我现在被困住了.

一切似乎都很好,代理类(或客户端)已生成,构建请求和发送它们也很好,除了身份验证部分.我们似乎无法弄明白该怎么做.

使用:

client.ChannelFactory.Credentials.UserName.UserName = "myusername";
client.ChannelFactory.Credentials.UserName.Password = "mypassword";
Run Code Online (Sandbox Code Playgroud)

似乎不起作用.(当我检查由client.Endpoint.Binding.CreateBindingElements()返回的BindingElementCollection时,没有SecurityBindingElement)

我已经尝试了很多其他方法,但我认为我缺少一些基本的东西,缺乏文档也没有真正帮助.

所以问题是:如何使用WCF调用Web服务时发送用户名和密码?

编辑: 只是为了澄清,请求应包含类似于此的内容:

 <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-25763165">
        <wsse:Username>username</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">1DiaGTkOLk/CZhDaEpbkAaKRfGw=</wsse:Password>
        <wsse:Nonce>6ApOnLn5Aq9KSH46pzzcZA==</wsse:Nonce>
        <wsu:Created>2009-05-13T18:59:23.309Z</wsu:Created>
     </wsse:UsernameToken>
  </wsse:Security>
Run Code Online (Sandbox Code Playgroud)

Reb*_*cca 6

我有同样的问题.我使用a MessageInspector来代替自定义令牌序列化程序UsernameTokenBeforeSendRequest方法中添加正确的.然后我使用自定义行为来应用修复.

在我的博客文章中记录整个过程(带有演示项目)在WCF客户端代理中支持WS-I Basic Profile Password Digest.或者,您只需阅读PDF即可.

如果您想跟进我的进展到解决方案,您将在StackOverflow上找到它,标题为" WCF客户端使用WS-Security UsernameToken PasswordDigest身份验证方案消耗Axis 2 Web服务时出错 ":