Как настроить проверку подлинности имени пользователя / пароля для WCF netTcpBinding?
Я хотел бы иметь возможность использовать аутентификацию по имени пользователя / паролю с nettcpbinding, это возможно? (UserNamePasswordValidator или что-то в этом роде), никакой проверки подлинности windows.
Я настраиваю все с помощью кода, поэтому, пожалуйста, используйте только код, а не приложение.конфиг в любых примерах.
1 ответ:
Вот что я придумал, я понятия не имею, если какой-то код не требуется:
Хост службы:
ServiceHost host = new ServiceHost(concreteType); var binding = new NetTcpBinding(SecurityMode.TransportWithMessageCredential, true); binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; host.AddServiceEndpoint(serviceType, binding, "net.tcp://someaddress:9000/" + name); host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameValidator(); host.Credentials.ServiceCertificate.Certificate = new X509Certificate2("mycertificate.p12", "password"); host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
И клиентская сторона:
var binding = new NetTcpBinding(SecurityMode.TransportWithMessageCredential, true); binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; var factory = new ChannelFactory<ISwitchService>(binding, new EndpointAddress( new Uri("net.tcp://someaddress:9000/switch"))); factory.Credentials.UserName.UserName = "myUserName"; factory.Credentials.UserName.Password = "myPassword";