我有一个WCF服务,将需要接收客户端凭证,并保持某种形式的基于角色的数据的基础上,我的身份验证方法。WCF - 在头中配置客户端/服务器身份验证?
客户端将驻留在许多不同的系统,因此,每个客户都会有一个唯一的用户ID和PW。
我正在使用basicHttpBinding并阅读了一些描述该过程的文章,例如这一个, http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s-channelfactory-interface/。
所以,我正在寻找的是如果有人这样来配置,以看一看,所以我可以得到这个我自己的解决方案一个完整的客户端/服务器。
我希望做的是在标题为每个请求通过用户名和密码,传回某种SecurityTokenValidationException上失败,或者如果继续传递。
谢谢。
UPDATE
我使用的是与客户端和服务器上的以下配置中的WSHttpBinding:
<wsHttpBinding>
<binding name="wsHttpEndpointBinding" >
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Basic" />
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
并从客户端调用外面的服务器如下:
ServiceReference1.ServiceClient myClient = new ServiceReference1.ServiceClient();
myClient.ClientCredentials.UserName.UserName = "billuser";
myClient.ClientCredentials.UserName.Password = "mypassword";
Response.Write("Data from WCF Service: " + myClient.GetData(1));
我想我需要一点点连接服务器上的CustomUsernamePasswordValidator,因为我仍然得到“......无法启动”。错误。
当我从basicHttpBinding的切换到WsHttpBinding的(端点绑定=“的wsHttpBinding” bindingConfiguration =“wsHttp”)我得到错误“的请求的服务......不能启动。请参见服务器的诊断跟踪日志更多信息。”由于这是托管解决方案,因此我无法访问日志。 我正在通过https执行此操作。 – ElHaix 2009-11-26 02:56:47
如果您使用的是https,您是否为绑定配置了传输安全性?传输安全意味着传输协议加密通道。由于您使用的是https,因此您需要为绑定启用传输安全性。尝试配置,看看它是否工作。您可能需要能够看到完整的异常报告才能使安全工作。启动和运行通常是一些试验和错误......它并不是真正的“困难”,只是在您第一次实现端点安全性时“不明显”。 – jrista 2009-11-26 04:54:58
对于WsHttpBinding的为客户端和服务器,我设置安全模式=“TransportWithMessageCredential”,运输clientCredentialType =“基本”,消息clientCredentialType =“用户名”。所以通过错误信息,我知道他们正在互相交谈,只是不正确:)。在进行服务调用之前,我还设置了proxy.ClientCredentials.UserName.UserName和proxy.ClientCredentials.UserName.Password(如果我没有,那是另一个错误)。 – ElHaix 2009-11-26 05:03:11