0

我有一个 WCF 服务,需要接收客户端凭据,并根据我的身份验证方法维护某种基于角色的数据。

客户端将驻留在许多不同的系统上,因此,每个客户端将具有唯一的用户 ID 和密码。

我正在使用 basicHttpBinding 并阅读了一些文章,例如这篇文章, http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s -channelfactory-interface/,描述该过程。

所以我正在寻找的是是否有人配置了一个完整的客户端/服务器来查看,以便我可以从中得出我自己的解决方案。

我想做的是在每个请求的标头中传递用户名和密码,在失败时传回某种 SecurityTokenValidationException,或者在通过时继续。

谢谢。

更新

我在客户端和服务器上都使用具有以下配置的 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,因为我仍然收到“...无法激活”。错误。

4

1 回答 1

1

您是否需要使用 basicHttpBinding?这种绑定实际上只是为了提供对遗留 WS-BasicProfile 实现(即 ASMX)的支持。如果您的客户端也是 .NET/WCF,我强烈建议使用 wsHttpBinding,它提供了大量开箱即用的安全选项。您可以将证书、用户名/密码等用于传输和/或消息安全,而无需自己编写任何安全内容。只需配置并运行 (CAG)。

安全凭证信息可通过 OperationContext 提供给服务本身,以防您需要直接从代码中访问它。但是,如果您的代码确实需要访问它,我建议您编写一个行为来从 OperationContext 中提取相关信息并将其放在更特定于应用程序的东西中,这样您就不必在需要访问的任何地方引用 System.ServiceModel关于 OperationContext 的信息。

于 2009-11-26T02:40:35.083 回答