2

現在、を使用し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?
      }
  }

どんな助けでも大歓迎です。

4

1 に答える 1

1

この記事のいくつかのコメント - Silverlight 3: カスタム ユーザー名/パスワード認証メカニズムを使用して WCF サービスを保護し、さまざまなテストから - このif ([...]PrimaryIdentity.IsAuthenticated)セクションは不要です。内部で障害UserNamePasswordValidatorをスローすると、セキュリティ ネゴシエーションが中止されます。

ただし、作成者に代わって 1 つの優れたアイデアは、if ([...]PrimaryIdentity.IsAuthenticated)条件ステートメントをそのままにしておくと、将来、新しいバインディング (接続タイプ) がセキュリティなしで追加された場合に役立つということです。

于 2010-08-15T08:06:08.743 に答える