Нужно ли WCF UserNamePasswordValidator проверять PrimaryIdentity.IsAuthenticated? - PullRequest
2 голосов
/ 11 августа 2010

В настоящее время у меня есть служба, которая использует UserNamePasswordValidator для аутентификации пользователя клиента. Код для проверки выглядит следующим образом:

  public override void Validate(String userName, String password)
  {
      if (userName == null) || (password == null)
          throw new FaultException("Username and/or password not specified.");
      if (userName != "test") && (password != "tset")
          throw new FaultException("Invalid username and/or password.");
  }

Как видите, код всегда выдает исключение, если что-то не так.

Теперь вопрос - есть ли причина, по которой я должен проверить, истинно ли ServiceSecurityContext.Current.PrimaryIdentity.IsAuthenticated в моих OperationContract функциях? Например,

  public interface IMyService
  {
      [OperationContract]
      void myOpContract();
  }

  public class MyService : IMyService
  {
      public void myOpContract()
      {
          // Do I really need this conditional statement?
          if (ServiceSecurityContext.Current.PrimaryIdentity.IsAuthenticated)
              // Proceed as expected
          else
              // Fail?
      }
  }

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 15 августа 2010

Из нескольких комментариев к этой статье - Silverlight 3. Защита службы WCF с помощью настраиваемого механизма аутентификации имени пользователя / пароля и из различных тестов - раздел if ([...]PrimaryIdentity.IsAuthenticated) не требуется. Выявление ошибки внутри UserNamePasswordValidator позволяет прервать переговоры по безопасности.

Однако одна отличная идея от имени автора заключается в том, что сохранение условного оператора if ([...]PrimaryIdentity.IsAuthenticated) на месте помогает, если в будущем будет добавлено новое связывание (тип соединения) без защиты.

...