Я использую службу WCF, которая, помимо прочего, используется в качестве серверной части для веб-сайта. Поскольку и веб-сайт, и служба WCF работают на одном компьютере, и в интересах производительности я настроил его с помощью netTcpBinding.
Теперь дело в том, что, поскольку они существуют в одном и том же блоке, меня действительно не волнует ни безопасность транспортного уровня, ни шифрование на уровне сообщений; единственный возможный способ перехвата сообщений - это если кто-то сам заходит на веб-сервер, и если они это делают, у меня уже есть большие проблемы.
Итак, мой вопрос: когда клиент и сервер уже находятся в доверенной подсистеме, какую конфигурацию можно использовать для обеспечения максимально быстрой работы netTcpBinding?
Конечно, ответ может заключаться в использовании безопасности "none". Но в моем конкретном случае мне все еще нужно использовать аутентификацию UserName для пользовательской базы данных. Можно ли настроить его так, чтобы он все еще использовал аутентификацию UserName, но не беспокоился о сертификатах или защите данных между конечными точками? Или, возможно, мне нужно реализовать пользовательское поведение с настраиваемым заголовком SOAP для хранения имени пользователя / пароля, и тогда я действительно смогу установить безопасность на «none»?
Конфигурация сервера
<netTcpBinding>
<binding name="Net_Tcp_Binding">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>
Он использует пользовательскую аутентификацию UserName - в основном, каждый вызов аутентифицируется и авторизуется по пользовательской базе данных. Сервисная сторона также использует сертификат для ведения переговоров со своими клиентами, например:
<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>