我在SSL下的本地IIS上托管了WCF服务。 它似乎与SL客户端合作。但我坚持用户身份验证。 我有登录屏幕,其中包含用于输入用户名和密码的文本框。一旦用户点击登录按钮,必须发生一些事情,但是什么?我看到很多例子,设置ClientCredentials是最后一步。如果用户输入错误的凭据,我想要做什么? 调用某些操作后抛出异常。我得到的不是我抛出的错误异常,而是CommunicationException。
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在调用某些操作后变为只读。所以我必须刷新一些方法。我在考虑更换端点行为,但我不确定这是不是好主意。
所以,基本上我的主要问题是:“如果用户输入错误的凭据,我想做什么?”
答案 0 :(得分:0)
对于WCF,有两种身份验证。
首先,您可以创建在用户一直到您的WCF界面之前工作的身份验证。因此,如果您使用客户端证书,用户/密码或表单身份验证,则在WCF端点定义中声明这些身份验证形式。这些形式的身份验证在用户(实际上)甚至到达ping()函数之前向用户提出质疑,暴露了WCF身份验证事件,在此期间您可以检查客户端的凭据。这很好,因为它可以帮助阻止黑客用拒绝服务攻击轰炸你的WCF服务,因为完整的请求永远不会得到没有身份验证的进程。可以在此处找到一个示例:http://msdn.microsoft.com/en-us/library/aa354513.aspx。
另一种方法更为明显:创建一个由客户端调用的普通WCF login()函数,在此期间客户端程序将ID /密码组合移交给您的数据库或目录进行完整检查。此方法也可以使用或不使用SSL。这个编程就像任何其他端点函数一样......这里没什么特别的。
两种方法都可以使用或不使用SSL。在任何一种情况下,如果凭据错误,您可以编程login()或authentication()例程以返回您喜欢的任何错误或消息,包括常规的401 Unauthorized错误。