从WCF UserNamePasswordValidator正确捕获SecurityTokenException

时间:2009-05-13 08:59:12

标签: wcf

根据http://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.usernamepasswordvalidator.aspx上的UserNamePasswordValidator示例,如果用户名或密码错误,应该抛出 SecurityTokenException 。这工作正常,但不是得到 SecurityTokenException 我得到 MessageSecurityException ,我传递的文本消息在某处丢失。我不是在发送“故障细节”。

如何正确捕捉这些错误的任何想法?我自己会尝试一些事情,看看能否做到。

1 个答案:

答案 0 :(得分:8)

快速查找(为什么我之前没有看到...),我在问题中提供的链接指向http://msdn.microsoft.com/en-us/library/aa702565.aspx处的另一个样本

它与第一个示例有些不同,并且如果您想提供消息详细信息,则有关于使用FaultException而不是SecurityTokenException的注释。

public override void Validate(string userName, string password)
{
    if (null == userName || null == password)
    {
        throw new ArgumentNullException();
    }

    if (!(userName == "test1" && password == "1tset") && !(userName == "test2" && password == "2tset"))
    {
        // This throws an informative fault to the client.
        throw new FaultException("Unknown Username or Incorrect Password");
        // When you do not want to throw an infomative fault to the client,
        // throw the following exception.
        // throw new SecurityTokenException("Unknown Username or Incorrect Password");
    }
}

客户端上捕获的异常现在包含一个FaultException类型的内部异常,其中包含我要公开的文本消息。