Wcf 什么';NetCPBinding最快的安全配置是什么?

Wcf 什么';NetCPBinding最快的安全配置是什么?,wcf,security,nettcpbinding,Wcf,Security,Nettcpbinding,我正在运行一个WCF服务,其中包括用作网站后端的服务。因为web站点和WCF服务都在同一台机器上运行,并且为了提高性能,我使用netTcpBinding进行了设置 现在的问题是,因为它们存在于同一个盒子上,我真的不关心传输级安全性或消息级加密;截获消息的唯一可能方式是,如果有人进入web服务器本身,如果他们这样做,我已经遇到了更大的问题 所以我的问题是:当客户机和服务器已经在一个受信任的子系统上时,可以使用什么配置来确保netTcpBinding尽可能快 当然,答案可能是使用“无”的安全性。但在

我正在运行一个WCF服务,其中包括用作网站后端的服务。因为web站点和WCF服务都在同一台机器上运行,并且为了提高性能,我使用netTcpBinding进行了设置

现在的问题是,因为它们存在于同一个盒子上,我真的不关心传输级安全性或消息级加密;截获消息的唯一可能方式是,如果有人进入web服务器本身,如果他们这样做,我已经遇到了更大的问题

所以我的问题是:当客户机和服务器已经在一个受信任的子系统上时,可以使用什么配置来确保netTcpBinding尽可能快

当然,答案可能是使用“无”的安全性。但在我的特殊情况下,我仍然需要对自定义数据库使用用户名身份验证。是否可以对其进行配置,使其仍然使用用户名身份验证,但不必担心证书或保护端点之间的数据?或者我是否需要使用自定义SOAP头实现自定义行为来存储用户名/密码,然后我真的可以将安全性设置为“无”

服务器配置

  <netTcpBinding>
    <binding name="Net_Tcp_Binding">
        <security mode="Message">
            <message clientCredentialType="UserName" />
        </security>
    </binding>
  </netTcpBinding>
<netTcpBinding>
  <binding name="Net_Tcp_Endpoint">
    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
    <security mode="Message">
      <message clientCredentialType="UserName" />
    </security>
  </binding>
</netTcpBinding>

它使用自定义用户名身份验证-基本上每个调用都针对自定义数据库进行身份验证和授权。服务方还使用证书与其客户进行协商,例如:

<serviceBehaviors>
  <behavior name="MyBehavior">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="true" />
    <serviceAuthorization principalPermissionMode="Custom">
      <authorizationPolicies>
        <add policyType="MyAssembly.CustomAuthorizationPolicy,MyAssembly" />
      </authorizationPolicies>
    </serviceAuthorization>
    <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyAssembly.CustomCredentialValidator,MyAssembly" />
      <serviceCertificate x509FindType="FindBySubjectName" findValue="CN=servercert" storeLocation="LocalMachine" storeName="My" />
    </serviceCredentials>
  </behavior>
</serviceBehaviors>

客户端配置

  <netTcpBinding>
    <binding name="Net_Tcp_Binding">
        <security mode="Message">
            <message clientCredentialType="UserName" />
        </security>
    </binding>
  </netTcpBinding>
<netTcpBinding>
  <binding name="Net_Tcp_Endpoint">
    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
    <security mode="Message">
      <message clientCredentialType="UserName" />
    </security>
  </binding>
</netTcpBinding>

“无”将是最快的,是:-)

另一方面,如果您的服务和后端在同一台机器上运行,那么您还应该认真研究netNamedPipe绑定,如果您有“机器上”通信,这是绝对最佳的。它甚至比netTcp更快、更高效

为了根据服务对调用方进行身份验证,您需要使用某种安全方法——因为netNamedPipe只支持“无”或“Windows”,所以我选择Windows。如果不使用none,则无法识别(验证)调用方,因此无法根据调用方的身份进行授权(谁可以做什么)

一旦验证了呼叫方(呼叫我的人)的身份,就可以使用Windows组或内置的ASP.NET成员资格/角色提供程序子系统执行基于角色的授权,以确保谁可以执行哪些操作。这可以使用服务配置的行为部分中名为
的服务行为进行配置

马克