2009-11-26 173 views
0

我有一个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,因为我仍然得到“......无法启动”。错误。

回答

1

是使用basicHttpBinding的满足你的要求?该绑定实际上只是为了支持传统的WS-BasicProfile实现(即ASMX)。如果你的客户也是.NET/WCF,我会强烈推荐使用wsHttpBinding,它提供了大量的开箱即用的安全选项。您可以将证书,用户名/密码等用于传输和/或消息安全性,而无需自己编写任何安全性内容。只需配置并去(CAG)。

安全证书信息可通过的OperationContext服务本身,如果你需要从代码直接访问它。如果你的代码就需要访问它,但是,我会建议写一个行为从的OperationContext提取相关信息,并将其放置在一些更具体的应用程序,让你不必到处你需要查阅参考System.ServiceModel有关OperationContext的信息。

+0

当我从basicHttpBinding的切换到WsHttpBinding的(端点绑定=“的wsHttpBinding” bindingConfiguration =“wsHttp”)我得到错误“的请求的服务......不能启动。请参见服务器的诊断跟踪日志更多信息。”由于这是托管解决方案,因此我无法访问日志。 我正在通过https执行此操作。 – ElHaix 2009-11-26 02:56:47

+0

如果您使用的是https,您是否为绑定配置了传输安全性?传输安全意味着传输协议加密通道。由于您使用的是https,因此您需要为绑定启用传输安全性。尝试配置,看看它是否工作。您可能需要能够看到完整的异常报告才能使安全工作。启动和运行通常是一些试验和错误......它并不是真正的“困难”,只是在您第一次实现端点安全性时“不明显”。 – jrista 2009-11-26 04:54:58

+0

对于WsHttpBinding的为客户端和服务器,我设置安全模式=“TransportWithMessageCredential”,运输clientCredentialType =“基本”,消息clientCredentialType =“用户名”。所以通过错误信息,我知道他们正在互相交谈,只是不正确:)。在进行服务调用之前,我还设置了proxy.ClientCredentials.UserName.UserName和proxy.ClientCredentials.UserName.Password(如果我没有,那是另一个错误)。 – ElHaix 2009-11-26 05:03:11

相关问题