Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误客户端凭据的常见做法是什么?_C#_.net_Wcf_Ssl - Fatal编程技术网

C# 错误客户端凭据的常见做法是什么?

C# 错误客户端凭据的常见做法是什么?,c#,.net,wcf,ssl,C#,.net,Wcf,Ssl,我在本地IIS上使用SSL托管WCF服务。 它似乎正在与SL客户端一起工作。但我坚持用户身份验证。 我有一个带有用户名和密码文本框的登录屏幕。一旦用户点击登录按钮,一定会发生一些事情,但什么呢?我看到了很多示例,其中设置ClientCredentials是最后一步。如果用户输入了错误的凭据,我该怎么办? 调用某个操作后引发异常。我得到的不是我抛出的错误异常,而是通信异常 public class UserAuthentication : UserNamePasswordValidator

我在本地IIS上使用SSL托管WCF服务。 它似乎正在与SL客户端一起工作。但我坚持用户身份验证。 我有一个带有用户名和密码文本框的登录屏幕。一旦用户点击登录按钮,一定会发生一些事情,但什么呢?我看到了很多示例,其中设置ClientCredentials是最后一步。如果用户输入了错误的凭据,我该怎么办? 调用某个操作后引发异常。我得到的不是我抛出的错误异常,而是通信异常

public class UserAuthentication : UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
            if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
            {
                throw new FaultException("Invalid user name or password");
            }
    }
此外,在调用某些操作后,ClientCredentials变为只读。所以我得重新整理一下。我想替换端点行为,但我不确定这是个好主意


所以,基本上我的主要问题是:“如果用户输入了错误的凭据,我该怎么办?”

当涉及到WCF时,有两种身份验证

首先,您可以在用户访问WCF接口之前创建有效的身份验证。因此,如果您使用的是客户端证书、用户/密码或表单身份验证,则这些形式的身份验证将在WCF端点定义中声明。这些形式的身份验证在用户使用ping()函数之前(实际上)向用户发出挑战,从而公开一个WCF身份验证事件,在此期间,您可以检查客户端的凭据。这很好,因为它可以帮助阻止黑客通过拒绝服务攻击轰炸您的WCF服务,因为如果没有身份验证,完整请求永远不会得到进程。可以在此处找到一个示例:

另一种方法更为明显:创建一个由客户端调用的普通WCF login()函数,在此过程中,客户端程序将ID/密码组合交给您,以便对您的数据库或目录进行完整检查。此方法也可以在使用或不使用SSL的情况下使用。这是像任何其他端点函数一样编程的。。。这里没什么特别的


这两种方法都可以使用或不使用SSL。无论哪种情况,如果凭据错误,您都可以对login()或authentication()例程进行编程,以返回任何错误或类似消息,包括常规错误

有人吗?我确信有某种方法是存在的。