我正在通过NetTcp在WCF上使用自定义的用户名/密码验证程序,以验证连接到我的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();
是否有一种方法可以使每次呼叫或周期性地验证客户端凭据?
答案 0 :(得分:0)
通常来说,调用后,服务器将自动关闭连接,这取决于绑定的以下参数。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding
当然,我们也可以在客户端上手动将其关闭。
client.Close()
此外,我无法理解你的意思。该会话是连续的,您在调用服务之前已在代码段中设置了凭据。您是什么意思,再也不会得到验证?
我认为,如果您想撤消来自客户端的访问权限,则可以在服务器端更改验证逻辑。