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)
我有同样的问题.我使用a MessageInspector来代替自定义令牌序列化程序UsernameToken在BeforeSendRequest方法中添加正确的.然后我使用自定义行为来应用修复.
在我的博客文章中记录整个过程(带有演示项目)在WCF客户端代理中支持WS-I Basic Profile Password Digest.或者,您只需阅读PDF即可.
如果您想跟进我的进展到解决方案,您将在StackOverflow上找到它,标题为" WCF客户端使用WS-Security UsernameToken PasswordDigest身份验证方案消耗Axis 2 Web服务时出错 ":