2010-08-11 15 views
2

Actuellement, j'ai un service qui utilise un UserNamePasswordValidator pour authentifier l'utilisateur client. Le code pour la validation va comme suit:Est-ce que WCF UserNamePasswordValidator nécessite de vérifier PrimaryIdentity.IsAuthenticated?

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."); 
    } 

Comme vous pouvez le voir, le code lèvera toujours une exception quand quelque chose ne va pas.

Maintenant pour la question - Y at-il une raison pour laquelle je devrais vérifier si ServiceSecurityContext.Current.PrimaryIdentity.IsAuthenticated est vrai dans mes fonctions OperationContract? Par exemple,

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? 
     } 
    } 

Toute aide serait grandement appréciée.

Répondre

1

De plusieurs commentaires dans cet article - Silverlight 3: Securing your WCF service with a custom username/password authentication mechanism et de divers tests - la section if ([...]PrimaryIdentity.IsAuthenticated) n'est pas requise. Lancer une erreur à l'intérieur du UserNamePasswordValidator fait l'affaire d'abandonner la négociation de sécurité.

Cependant, une excellente idée de la part de l'auteur est que laisser l'instruction conditionnelle if ([...]PrimaryIdentity.IsAuthenticated) en place aide si à l'avenir une nouvelle liaison (type de connexion) est ajoutée sans sécurité.