0

我上下看了看,似乎找不到一种方法来让一个简单的 WCF 服务(使用basicHttpBindingwsHttpBinding)针对这种配置进行身份验证:

<authentication mode="Forms">
  <forms cookieless="UseCookies">
    <credentials passwordFormat="Clear">
      <user name="test" password="pass"/>
    </credentials>
  </forms>
</authentication>

基本上,我想硬编码一个简单的用户/通行证(不要问为什么),并确保我的 WCF 服务使用它。

在客户端我有这个:

client.ClientCredentials.UserName.UserName = "test";
client.ClientCredentials.UserName.Password = "pass";

但是凭证似乎没有被传递。HttpContext.Current.User.Identity永远不会在 WCF 端进行身份验证。

我尝试使用以下设置尝试使用无、传输、消息中的所有内容......但None似乎只让服务运行(但没有发送/使用凭据)。其他设置似乎需要 X509 证书(正如我在这个很好的示例中发现的那样)。

  <wsHttpBinding>
    <binding name="userHttp">
      <security mode="None">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
  </wsHttpBinding>

所以,总而言之...我想创建一个非常简单的 WCF 服务(通过 HTTP 运行,而不是 HTTPS),它具有更简单的纯文本用户名/密码身份验证。应该是可能的,但我已经迷路了。最好的解决方案涉及尊重<user />条目,但我会对任何其他简单的实现感到满意。它不需要使用cookies。就我而言,它也可以在每个服务方法调用上发送用户名/密码。

4

1 回答 1

2

如果您想在不使用 ssl 的消息级别发送用户/密码,请使用ClearUsernameBinding。如果您希望在传输级别相同,请使用TransportCredentialOnly

<binding name="BasicHttpEndpointBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
</binding>
于 2013-08-22T16:08:19.403 回答