【问题标题】:Properly catch SecurityTokenException from a WCF UserNamePasswordValidator从 WCF UserNamePasswordValidator 正确捕获 SecurityTokenException
【发布时间】:2009-05-13 17:31:08
【问题描述】:

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

任何想法如何正确捕获这些错误?我将自己尝试一些事情,看看我是否能做对。

【问题讨论】:

    标签: wcf


    【解决方案1】:

    快速查找(为什么我之前没有看到...),我在问题中提供的链接指向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 类型的内部异常,其中包含我要公开的文本消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2013-05-07
      • 1970-01-01
      相关资源
      最近更新 更多