netTcpBinding 最快的安全配置是啥?

Posted

技术标签:

【中文标题】netTcpBinding 最快的安全配置是啥?【英文标题】:What's the fastest possible security configuration for netTcpBinding?netTcpBinding 最快的安全配置是什么? 【发布时间】:2010-11-22 00:21:50 【问题描述】:

我正在运行 WCF 服务,除其他外,它用作网站的后端。因为网站和 WCF 服务都运行在同一台机器上,为了性能,我设置了一个 netTcpBinding。

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

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

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

服务器配置

  <netTcpBinding>
    <binding name="Net_Tcp_Binding">
        <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_Endpoint">
    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
    <security mode="Message">
      <message clientCredentialType="UserName" />
    </security>
  </binding>
</netTcpBinding>

【问题讨论】:

【参考方案1】:

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

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

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

一旦你验证了调用者(谁在给我打电话),那么你可以使用 Windows 组或内置的 ASP.NET 成员资格/角色提供者子系统进行基于角色的授权,以确保谁可以做什么操作。这可以使用服务配置的行为部分中名为 &lt;serviceAuthoritzation&gt; 的服务行为进行配置。

马克

【讨论】:

以上是关于netTcpBinding 最快的安全配置是啥?的主要内容,如果未能解决你的问题,请参考以下文章

WCF - 在 nettcpbinding (c#) 中禁用安全性

在 WCF-netTCPBinding 中测试 TLS 安全性

生成第 n 个 Motzkin 数的最快方法是啥?

获取计算列表中前 n 个项目的最快方法是啥?

WCF NetTcpBinding 安全性 - 它是如何工作的?

WCF - 如何为 NTLM 身份验证配置 netTcpBinding?