Estoy ejecutando un servicio WCF que, entre otras cosas, se utiliza como back-end para un sitio web. Debido a que tanto el sitio web como el servicio WCF se ejecutan en la misma máquina, y en aras del rendimiento, lo configuré con un netTcpBinding.¿Cuál es la configuración de seguridad más rápida posible para netTcpBinding?
Ahora, la cosa es que, como existen en la misma caja, realmente no me importa ni la seguridad a nivel de transporte ni la encriptación a nivel de mensaje; la única forma posible de interceptar los mensajes es si alguien entra al servidor web, y si lo hacen, ya tengo problemas mayores.
Así que mi pregunta es: cuando el cliente y el servidor ya están en un subsistema confiable, ¿qué configuración se puede usar para asegurar que netTcpBinding sea lo más rápido posible?
Por supuesto, la respuesta podría ser utilizar la seguridad de "ninguno". Pero en mi caso particular, todavía necesito usar la autenticación UserName contra una base de datos personalizada. ¿Se puede configurar para que siga usando la autenticación de Nombre de usuario, pero no se moleste con los certificados o la seguridad de los datos entre los puntos finales? ¿O quizás necesito implementar un comportamiento personalizado con un encabezado SOAP personalizado para almacenar el nombre de usuario/contraseña, y luego realmente puedo establecer la seguridad en "ninguno"?
de configuración del servidor
<netTcpBinding>
<binding name="Net_Tcp_Binding">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>
Utiliza Nombre de usuario personalizada - básicamente cada llamada autentica & autoriza contra una base de datos personalizada. El lado del servicio también utiliza un certificado para negociar con sus clientes, por ejemplo:
<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>
configuración del cliente
<netTcpBinding>
<binding name="Net_Tcp_Endpoint">
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>