【问题标题】:What is common practices for wrong ClientCredentials?错误 ClientCredentials 的常见做法是什么?
【发布时间】:2014-01-06 14:15:38
【问题描述】:

我在 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 也只有在调用某些操作后才变为只读状态。所以我必须以某种方式刷新它。我正在考虑替换端点行为,但我不确定这是个好主意。

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

【问题讨论】:

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

标签: c# .net wcf ssl


【解决方案1】:

WCF 有两种身份验证。

首先,您可以创建在用户进入您的 WCF 界面之前有效的身份验证。因此,如果您使用客户端证书、用户/密码或表单身份验证,这些身份验证形式将在 WCF 端点定义中声明。这些形式的身份验证会在用户使用您的 ping() 函数之前(实际上)挑战用户,从而公开一个 WCF 身份验证事件,在此期间您可以检查客户端的凭据。这很好,因为它可以帮助阻止黑客通过拒绝服务攻击来轰炸您的 WCF 服务,因为完整的请求永远不会在没有身份验证的情况下获得进程。可以在此处找到示例:http://msdn.microsoft.com/en-us/library/aa354513.aspx

另一种方法更明显:创建一个普通的 WCF login() 函数,由客户端调用,在此期间客户端程序移交 ID/密码组合,以对您的数据库或目录进行全面检查。这种方法也适用于有或没有 SSL 的情况。这就像任何其他端点功能一样被编程......这里没什么特别的。

这两种方法都可以使用或不使用 SSL。在任何一种情况下,如果凭据错误,您可以对 login() 或 authentication() 例程进行编程,以返回任何您喜欢的错误或消息,包括常规的 401 Unauthorized 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2010-10-16
    • 2011-11-13
    • 2020-05-07
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多