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

通过basicHttpBinding在WCF中进行自定义身份验证,wcf,authentication,configuration,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="0

我有我的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>

我找到了一些文章,其中描述了如何通过wsHttpBinding解决我的问题,但是使用它我得到了服务器错误。我可以使用basicHttpBinding创建身份验证吗?或者我需要wsHttpBinding以及如何创建身份验证?

我将把所有这些浓缩成一个答案,这样就可以在一个地方找到,而不是分散在评论中。使用
BasicHttpBinding
意味着您的凭证将以明文形式通过线路传递,这意味着它们可以在途中被拦截而不会有太多麻烦。您可以通过使用
WsHttpBinding
来避免此问题,它允许您使用三种不同的安全类型之一:
Transport
Message
TransportWithMessageCredential
。你可以读到这些。但是,请记住,使用这些证书中的任何一种,您都必须持有某种形式的证书


问题简要讨论了一些其他WCF安全选项。如果你已经死心塌地地使用<代码> BaseChutpBoope并将你的凭据传递到线上,你至少可以考虑在这样做之前掩饰它们,也许是用盐或类似物的Sa1。如果您不想使用ASP.NET成员资格之类的内置和已完成的解决方案,您必须自己弄清楚要来回传递哪种身份验证令牌。

您的问题是什么?您需要记住,如果您使用basicHttpBinding并尝试传递凭据,它们将以纯文本形式通过网络传递,因此可以被拦截……因此使用basicHttpBinding不是一个好主意,不是吗?在这种情况下,我应该使用什么绑定呢?您可能需要使用
WsHttpBinding
-然后为了安全起见,您可以使用
Transport
Message
TransportWithMessageCredential
。你可以在这里读到它们之间的区别:谢谢你,它帮助了很多。您能告诉我是否应该使用WsHttpBinding证书吗。因为在你发完帖子后,我试图使用它,但得到的错误是没有提供服务证书。在ServiceCredentials中指定服务证书。我能否以某种方式避免使用此证书?据我所知,没有证书就无法使用任何这些安全方法。您可以在我对此问题的回答中找到有关保护WCF服务的更多信息的链接:
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();