Повторная проверка учетных данных в WCF UserNamePasswordValidator при каждом вызове - PullRequest
0 голосов
/ 05 июня 2019

Я использую пользовательское средство проверки имени пользователя / пароля в WCF через NetTcp для аутентификации клиентов, подключающихся к моей службе WCF.Что я заметил, так это то, что, как только клиент проходит проверку подлинности, никогда не проверяется снова, это означает, что если я хочу отозвать доступ у клиента, мне придется вручную принудительно отключить его.

Моя конфигурация serviceHost выглядит следующим образом:

_serviceHost.Description.Behaviors.Add(credentialsBehavior);
_serviceHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
_serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = _userValidator;
_serviceHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
_serviceHost.Credentials.ServiceCertificate.SetCertificate(AppSettingsManager.I.CertificateStoreLocation, AppSettingsManager.I.CertificateStoreName, AppSettingsManager.I.CertificateFindBy, AppSettingsManager.I.CertificateFindValue);

и мои клиенты подключаются с помощью ChannelFactory:

var client = new DuplexChannelFactory<T>(new InstanceContext(this), binding, endpointAddress);
client.Credentials.UserName.UserName = ConnectionProperties.Authentication.Credentials.Username;
client.Credentials.UserName.Password = ConnectionProperties.Authentication.Credentials.Password;
client.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = AppSettingsManager.I.CertificateValidationMode;

client.CreateChannel();

Существует ли способ проверки учетных данных клиента на каждомзвонить или периодически?

1 Ответ

0 голосов
/ 06 июня 2019

Вообще говоря, после вызова сервер автоматически закроет соединение, это зависит от следующего параметра привязки.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding
Конечно, мы также можем закрыть его вручную на клиенте.

client.Close()

Кроме того, я не смог получить вашу точку зрения.сеанс является непрерывным, и вы установили учетные данные в фрагментах кода перед вызовом службы.Что вы имеете в виду, что никогда не получит проверку снова?
По моему мнению, если вы хотите отозвать доступ у клиента, вы можете изменить логику проверки на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...