【发布时间】:2019-12-02 09:23:14
【问题描述】:
customUserNamePasswordValidatorType 是否只有一个实例,或者每个“应用程序”可能有多个实例?
如果有更多实例,是否在某处写入逻辑,何时创建它们(例如,每次登录一个实例,每小时或其他)?
【问题讨论】:
标签: c# wcf wcf-security
customUserNamePasswordValidatorType 是否只有一个实例,或者每个“应用程序”可能有多个实例?
如果有更多实例,是否在某处写入逻辑,何时创建它们(例如,每次登录一个实例,每小时或其他)?
【问题讨论】:
标签: c# wcf wcf-security
据我所知,customUserNamePasswordValidatorType 仅存在一个实例。无论 WCF 应用程序以何种方式运行,单个实例或多个实例,对于使用该服务的每个人来说,始终存在一个验证逻辑实例。
using (WebServiceHost sh = new WebServiceHost(typeof(MyService), uri))
{
sh.AddServiceEndpoint(typeof(IService), binding, "");
ServiceMetadataBehavior smb;
smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
sh.Description.Behaviors.Add(smb);
}
sh.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom;
sh.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustUserNamePasswordVal();
Binding mexbinding = MetadataExchangeBindings.CreateMexHttpBinding();
sh.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");
sh.Opened += delegate
{
Console.WriteLine("Service is ready");
};
sh.Closed += delegate
{
Console.WriteLine("Service is clsoed");
};
sh.Open();
Console.ReadLine();
//pause
sh.Close();
Console.ReadLine();
}
还有验证类,UserNamePasswordValidator。
internal class CustUserNamePasswordVal : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if (userName != "jack" || password != "123456")
{
throw new FaultException("Username/Password is not correct");
}
}
}
官方链接。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-a-custom-user-name-and-password-validator
https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/user-name-password-validator
也许我不完全理解你的意思,如果有什么我可以帮助的,请随时告诉我。
【讨论】: