Правильно поймать исключение SecurityTokenException из WCF UserNamePasswordValidator - PullRequest
4 голосов
/ 13 мая 2009

В соответствии с примером UserNamePasswordValidator на http://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.usernamepasswordvalidator.aspx следует выдать SecurityTokenException , если имя пользователя или пароль неверны. Это работает нормально, но вместо получения SecurityTokenException я получаю MessageSecurityException и текстовое сообщение, которое я передаю, где-то теряется. Я не отправляю "детали в ошибках".

Есть идеи, как правильно отлавливать эти ошибки? Я собираюсь попробовать несколько вещей сам и посмотреть, смогу ли я сделать это правильно.

1 Ответ

8 голосов
/ 13 мая 2009

Быстрый поиск (почему я не видел, если раньше ...), ссылка, которую я указал в вопросе, указывала на другой образец на 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 с текстовым сообщением, которое я хочу предоставить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...