Вопрос

В настоящее время у меня есть услуга, которая использует 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?
      }
  }

Любая помощь будет очень ценится.

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top