WCF UserNamePasswordValidator是否需要检查PrimaryIdentity.IsAuthenticated?

时间:2010-08-11 15:32:10

标签: c# wcf validation authentication operationcontract

目前,我有一项使用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 个答案:

答案 0 :(得分:1)

通过本文中的几条评论 - Silverlight 3: Securing your WCF service with a custom username / password authentication mechanism以及各种测试 - if ([...]PrimaryIdentity.IsAuthenticated)部分不是必需的。在UserNamePasswordValidator内抛出错误会导致中止安全协商。

但是,代表作者的一个好主意是,保留if ([...]PrimaryIdentity.IsAuthenticated)条件语句有助于将来添加新绑定(连接类型)而没有安全性。