【问题标题】:How to tell a user he entered incorrect credentials from customer username password validator如何告诉用户他从客户用户名密码验证器输入的凭据不正确
【发布时间】:2016-05-20 17:41:56
【问题描述】:

我有一个带有自定义用户名密码验证器的安全 WCF 服务。经过相当多的努力,一切终于正常了。我只有最后一个问题。每当我抛出异常以表明用户的登录凭据不正确时,它都会被转换为 MessageSecurityException 并显示消息“附加信息:从另一方收到不安全或不正确安全的故障。有关故障代码,请参阅内部 FaultException 和详细。”

如果我最初抛出一个 FaultException,内部异常将包含我打算让消费者看到的消息(“未知用户名或错误密码”)。如果抛出任何其他类型的异常,则内部异常实际上只是非描述性通用外部异常的副本。

我真的希望顶级异常包含“未知用户名或密码错误”消息。我什至尝试用所需的消息抛出我自己的 MessageSecurityException ,但即使这样也没有用。有谁知道如何从我的验证器中抛出异常,以使外部异常包含我希望消费者看到的消息?

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    我假设您正在使用故障合同来传播故障,如果不是,那可能是您的问题。 MessageSecurityException 很可能是由 WCF 生成的,因为它是一个 CommunicaitonException,它是使用 WCF 时的例外异常之一。这个question 中提到了几个可能的原因。

    不过,我建议您重新考虑使用异常来处理无效的用户名/密码。很多人遵循只在异常情况下使用异常的做法,而无效的用户名/密码在这种情况下绝对不是例外。也许最好将带有错误消息的布尔值或字符串传回。

    【讨论】:

    • 当您创建用于安全 WCF 服务的自定义用户名密码验证器时,您必须从 UserNamePasswordValidator 派生一个类并覆盖 Validate 方法。 Validate 方法接受两个参数,用户名和密码,返回类型为 void。因此,在这种情况下,我看不出人们将如何传回布尔值或字符串。是的,我正在使用错误异常。但是,根据我的阅读,您不能使用验证者的错误合约。
    • 我误解了你想做什么。根据question.,您似乎无能为力。我认为情况并不完全相同,但我认为可能是相同的原因。根据该问题中的 cmets,该错误在 WCF 下面抛出,因为由于凭据错误,它无法设置安全连接。他们提到您可以更改一些设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多