当前,我有一项使用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: Securing your WCF service with a custom username / password authentication mechanism和各种测试-不需要if ([...]PrimaryIdentity.IsAuthenticated)部分。在UserNamePasswordValidator内抛出故障可以中止安全协商。

但是,代表作者的一个绝妙的主意是,如果将来在没有安全性的情况下添加新的绑定(连接类型),则保留if ([...]PrimaryIdentity.IsAuthenticated)条件语句会有所帮助。

10-08 10:53