Как настроить аутентификацию имени пользователя / пароля для WCF netTcpBinding? - PullRequest
6 голосов
/ 13 октября 2010

Я хотел бы иметь возможность использовать аутентификацию по имени пользователя / паролю с nettcpbinding, это возможно?(UserNamePasswordValidator или что-то подобное), без проверки подлинности Windows.

Я настраиваю все с помощью кода, поэтому, пожалуйста, используйте только код, а не app.config в любых примерах.

1 Ответ

16 голосов
/ 13 октября 2010

Это то, что я придумал, я понятия не имею, если какой-то код не требуется:

Сервисный хост:

        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";
...