我有NetTcpBinding的绑定自托管WCF服务。 我的两个服务器和客户端都将在同一个领域,所以我想使用Windows身份验证,但我也很喜欢客户端验证服务器证书(以避免内部人在这方面的中间人/ DNS篡改攻击)。 我读过,要做到这一点的方法是使用一个SPN,但我似乎无法得到那个工作; 无论什么SPN设置为客户端工程(即服务器和客户端不匹配,但客户端连接反正)。 很显然,我已经得到了某种配置错误的,但我不知道在哪里。 这里是服务器的服务配置:
<system.serviceModel>
<services>
<service name="AaaAuthService.AaaAuthService" behaviorConfiguration="AaaAuthServiceBehavior">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IAaaAuth" contract="AAA.IAaaAuthService">
<!--
<identity>
<servicePrincipalName value="AaaShlkjhlkjjjjhhhhjjpn/justink-pc.sgasdf1.allamericanasphaltasdf.casdfom"/>
</identity>
-->
</endpoint>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:9000/IAaaAuthService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="AaaAuthServiceBehavior">
<serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IAaaAuth" closeTimeout="00:00:20" openTimeout="00:00:10" receiveTimeout="00:00:10" sendTimeout="00:00:10" hostNameComparisonMode="StrongWildcard" maxConnections="2147483647">
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
<message clientCredentialType="Windows"/>
</security>
</binding>
</netTcpBinding>
</bindings>
Windows凭据似乎在获得通过 - OperationContext.Current.ServerSecurityContext.WindowsIdentity被填入账户信息。
我缺少的是在这里吗?