【问题标题】:Are there more customUserNamePasswordValidatorType instances?是否有更多 customUserNamePasswordValidatorType 实例?
【发布时间】:2019-12-02 09:23:14
【问题描述】:

customUserNamePasswordValidatorType 是否只有一个实例,或者每个“应用程序”可能有多个实例?
如果有更多实例,是否在某处写入逻辑,何时创建它们(例如,每次登录一个实例,每小时或其他)?

【问题讨论】:

    标签: c# wcf wcf-security


    【解决方案1】:

    据我所知,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
    也许我不完全理解你的意思,如果有什么我可以帮助的,请随时告诉我。

    【讨论】:

    • 我想从外部源加载一些值,加载这些值很昂贵,所以我想在开始时加载它们一次。问题是我是否可以将它们保存在本地,或者我必须将它们保存到某个静态属性中,以便每个实例都可以访问它们。
    • 对于默认的单实例运行模式,我觉得静态属性就够了。本地二进制文件也是一个好主意。只是我们可能要注意资源锁的问题。
    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多