通过basicHttpBinding在WCF中进行自定义身份验证

时间:2011-11-15 16:12:52

标签: wcf authentication configuration

我的WCF工作正常。我有以下配置:

<bindings>
  <basicHttpBinding>
      <binding name="HttpStreaming" maxReceivedMessageSize="65536000" closeTimeout="00:05:00" bypassProxyOnLocal="true" openTimeout="00:05:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" transferMode="Streamed" messageEncoding="Mtom">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="65536000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        </security>
      </binding>
  </basicHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="CifsManager.CifsManagerServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

<services>
  <service behaviorConfiguration="CifsManager.CifsManagerServiceBehavior" name="CifsManager.CifsManagerService">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="HttpStreaming" contract="CifsManager.ICifsManagerService"></endpoint>
  </service>
</services>

我为调用服务 ServiceClient 生成了代理类,我按以下方式调用它:

var service = new ServiceClient();
service.ClientCredentials.UserName.UserName = "111";
service.ClientCredentials.UserName.Password = "111";
service.bufferSize = int.Parse(ConfigurationManager.AppSettings["BufferSize"]);
var file= service.GetFile();

Here我发现文章描述了如何通过 wsHttpBinding 解决我的问题,但是使用它我得到了服务器错误。我可以使用 basicHttpBinding 创建身份验证,还是需要 wsHttpBinding ,我应该怎么做?

1 个答案:

答案 0 :(得分:0)

我只是将所有这些都压缩成一个答案,所以这一切都在一个地方,更容易找到而不是在评论中展开。使用BasicHttpBinding意味着您的凭据将通过网络以明文形式传递,这意味着它们可以在途中被截获而不会有太多麻烦。您可以使用WsHttpBinding来避免此问题,Transport允许您使用以下三种不同安全类型之一:MessageTransportWithMessageCredentialBasicHttpBinding。您可以阅读有关这些here的信息。但请记住,对于其中任何一种,您都必须拥有一种或另一种形式的证书。

This问题简要讨论了其他一些WCF安全选项。如果您已经开始使用{{1}}并通过线路传递您的凭据,您至少可以考虑在这之前以某种方式屏蔽它们,也许是带有盐或类似物的sha1。如果您不想使用ASP.NET成员资格之类的任何内置和完成的解决方案,您必须自己弄清楚要传递哪种类型的身份验证令牌。