WCF配置SSL上的SOAP明文密码身份验证

我有一个通过HTTPS连接到实现的WS-Security基于SOAP的Web服务的应用程序。 是用Java编写的Web服务,需要一个明文密码,以及正确设置时间戳。

经过大量的使用Google和实验,我无法弄清楚如何配置我的WCF客户端与该服务进行交互。 除了一个正确的答案,我也希望得到一个链接到一个教程,介绍了WCF和SOAP很好。

我现在的客户端的app.config如下:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="MyServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="TransportWithMessageCredential"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> <!--security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security--> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="https://p1.my.com/tx/services/MyService" binding="basicHttpBinding" bindingConfiguration="MyServiceSoapBinding" contract="My.IMyService" name="MyServiceEndpointPort" /> </client> </system.serviceModel> </configuration>

和客户端的代码如下所示:

string response; try { MyService.MyServiceClient svc = new WcfExample.MyService.MyServiceClient(); svc.ClientCredentials.UserName.UserName = "myUser"; svc.ClientCredentials.UserName.Password = "myPass"; response = svc.ping(); lblPingResponse.Text = response; } catch (System.ServiceModel.Security.MessageSecurityException mse) { lblPingResponse.Text = "MessageSecurityException: " + mse.Message; } catch (Exception ex) { lblPingResponse.Text = "Exception: " + ex.Message; }

此代码是抛出此异常:

MessageSecurityException“安全处理器无法找到该消息中一个安全头。这可能是因为该消息是一个不安全故障或因为在通信方之间的结合不匹配。如果所述服务被配置为安全和客户端可能发生这未使用的安全性。“

该WSE 3.0版本只需要以下工作:

ServiceUsernameTokenManager.AddUser(userName, password); UsernameToken token = new UsernameToken(userName, password, PasswordOption.SendPlainText); proxy = new _MyServiceWse(); Policy policy = new Policy(); policy.Assertions.Add(new UsernameOverTransportAssertion()); policy.Assertions.Add(new RequireActionHeaderAssertion()); proxy.SetPolicy(policy); proxy.SetClientCredential(token);

更新:

请求现在到达服务器和响应从服务器使用的app.config这个配置发送回:

<security mode="TransportWithMessageCredential"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security>

然后,客户端会抛出异常

“安全处理器无法找到消息中的安全标头。这可能是因为消息是不安全的故障或因为通信双方之间有约束力的不匹配。如果该服务被配置为安全可能出现这种情况和客户端不使用的安全性。“

这似乎是因为客户端发送一个时间戳头,但服务不返回时间戳头。 这可能是“正确的事情”,但它不是非常有用,因为有期待一个时间戳,但不会返回一个已部署在那里的许多Web服务。

如果有办法说服客户接受这种情况下,我很想知道。 在此同时,我会看看我是否可以将Web服务改为返回一个时间戳。

--------------解决方案-------------

虽然我知道你已经标志着从Mark_S为正确答案,你可能会发现以下解决您的问题。

你的错误信息是针对微软的修补程序KB971493:修补程序使WCF发送安全邮件和接收不安全的响应,并发送不安全的消息和接收安全的响应,可为.NET Framework 3.5 SP1。

Windows通信基础(WCF)不具有发送安全消息,然后接收不安全的响应,还是要发送不安全的消息和接收安全响应的功能性。 本文中介绍的修复程序增加了一个新的enableUnsecuredResponse属性。

我很想知道,如果这能解决你的问题。

关于你提到的具体问题,看看对#1和其他地方的一些类似的问题:

  • http://stackoverflow.com/questions/1787740/how-to-authenticate-in-wcf-services-in-basichttpbinding
  • http://icoder.wordpress.com/2007/06/22/how-to-setup-a-wcf-service-using-basic-http-bindings-with-ssl-transport-level-security/

链接到有用的教程和屏幕蒙上解释WCF的很详细:有在MSDN WCF开发中心里面什么都有,从初学者的教程,文章和示例代码。

另外,我建议你看一下Pluralsight屏幕上投下WCF - 这是一个很好的串联起“创建第一个WCF服务”和“创建第一个WCF客户端”一路相当高级的主题去。 亚伦Skonnard非常漂亮解释一切在10-15分钟截屏 - 强烈推荐!

分类:WCF 时间:2012-01-01 人气:0
本文关键词: WCF,WS安全性,肥皂
分享到:

相关文章

  • WCF传输安全性与SSL和线程信息 2012-04-02

    我有一个关于上述话题的问题. 我有一个WCF服务,使用传输安全模式吧. 但是有一些机制有关,我无法理解的线程状态. 在我服务的构造我试图设置,但是Thread.CurrentPrincipal中我的服务的调用方法的成为Thread.CurrentPrincipal中的无效的开始......我读到它可以在情况下使用WCF传输安全. 在WCF中进行传输安全性的原因,或者是有其他原因的这种行为? 提前致谢! 对不起,在解释混乱,如果有一些. --------------解决方案------------

  • WCF WS扔MaxReceivedMessageSizeExceeded 2014-02-05

    我有一个接受一些自定义的对象和一些被作为字节数组文档的WCF Web服务. 但每次我发送文件(不是一个特别大的一个)WS返回400错误的请求,并在跟踪日志它似乎纷纷抛出一个MaxReceivedMessageSizeExceeded . 话 System.ServiceModel.ProtocolException:最大邮件大小配额传入消息(65536)已超出. 为了增加配额,请使用相应绑定元素上MaxReceivedMessageSize财产. 现在的客户端应用程序有这个在它app.confi

  • 如何我得到了WCF自定义的肥皂头的值 2014-03-07

    我创建了一个自定义的肥皂头,并将其添加到通过IClientMessageInspector我留言 public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel) { var header = new MessageHeader<AuthHeader>(); header.Content = new AuthH

  • 继承WCF和Python肥皂水XML之间的差异? 2014-03-18

    这是我的第一篇文章,所以道歉,如果我不包括所有正确的信息! 我有一个关于不同的方式继承的问题是WCF和肥皂水(Python)的之间的表示. 我有一个C ++ / CLI WCF服务器(.NET 3.5 SP1)和我想要与之通信. 我用一个C#(WCF还)客户端,它做工精细,但也有使用肥皂水客户端(Python的2.6.4,肥皂水0.3.8)时的问题. 这主要是细的,但对于继承的类型,且差异似乎是在两个代表继承在SOAP的XML的方式. 当我看到服务器日志,我得到的结果类似下面的消息: C#的客户

  • 配置WCF传输安全性IIS6通过SSL 2014-06-13

    我一直在试图建立在IIS6上使用SSL WCF传输安全. 客户端是在同一个域中一个单独的机器上. 我明白了证书,根CA等的前提下,并有一个工作设置证书实现邮件安全性,并能在同一个环境设置使用这些没有probs. (我learn't很多过去一周:) 我有一个噩梦试图让我的客户对IIS 6验证服务时,我切换到SSL. 始终recieving打电话时"annonymous authetication不允许的." 在IIS中我有 根签署CA证书的网站SSL端口443上设置(如果我浏览https

  • 验证远程程序的完整性/有效期为WCF服务安全性的一部分 2014-06-20

    我已经运行在远程系统上的应用程序. 远程系统是内置到售货亭的嵌入式计算机. 这样一来,他们是有点"不信任",因为它们的物理安全性是相当宽松的. 但是,这些服务亭可通过WCF服务,我的服务器信用卡处理等. 使用计算机证书,等等,我可以验证客户端,他们说他们是谁,这可以防止别人抄袭关亭不知怎么的我的二进制文件,然后在自己的机器上运行它. 但是,我怎么能防止针对以下两种攻击: 有人需要二进制文件,修改它恶意,然后在系统上运行它 有人反编译我的应用程序,并用我的代码部分(例如当我引用的证书或共

  • 选择在该调用WCF WS多个域正在运行的后台客户端进程一个WCF安全模型? 2014-12-23

    我使用的wsHttpBinding和相应的应用程​​序调用这个Web服务创建一个WCF Web服务. 调用WS应用程序背后的想法是,它会被安装,并从多个客户端的网站作为后台进程运行. 在后台进程将定期通过调用WCF服务发送来自其各自的客户端回主机信息. 我应该实现什么样的WCF安全模型,以确保从安装在个人网站的过程中唯一的服务呼叫可以调用Web服务的方法呢? 注:Web服务将是在防火墙后面; 然而,这个额外的信息可以是无关紧要手边的问题. --------------解决方案----------

  • 为什么要使用WCF消息安全性受信任的证书? 2014-01-01

    什么是使用受信任的证书而不是自签名为WCF消息安全的优势在哪里? 据我了解它只是用于加密,没有真正验证身份. --------------解决方案------------- 取决于,如果您使用的SSL证书的HTTPS那么它用于加密提供了WCF服务,客户端可以要求它是可信的(或没有). 如果WCF服务要求客户​​签署的请求时,它仅用于检验/验证 - 然后你肯定会需要一个可信证书. (客户端证书然后被配置为<endpointBehavoir> 问题是你不能真正相信的消息,除非您信任发行人. 消息安

  • 如何解析传递到我的WCF服务操作肥皂+ XML消息? 2014-04-26

    我有以下的SOAP请求我从客户端,在那里基本上我要提取的名称,然后发回的"Hello测试"接收 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"

  • 加入弹簧WS安全性时WSSecurityException未找到 2014-07-23

    我跟着教程在:http://krams915.blogspot.com/2011/01/spring-ws-2-ws-security-using-wss4j.html 但我得到一个异常: 14/08/2011 17:56:42 org.apache.catalina.core.StandardContext listenerStart SEVERE: Exception sending context initialized event to listener instance of clas

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.328 (s). 10 q(s)