2011-05-16 3 views
4

J'ai une application WPF qui a juste un bouton. Lorsque le bouton est cliqué, tout ce qu'il fait est d'ouvrir le service. Voici le code:Où devrais-je lire mon nom d'utilisateur et mot de passe pour mon service WCF?

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     ServiceReference1.TestServiceClient c = new ServiceReference1.TestServiceClient(); 

     XDocument doc = XDocument.Load(@"c:\Test\Test.xml"); 

     c.ClientCredentials.UserName.UserName = doc.Root.Element("Credentials").Attribute("username").Value; 
     c.ClientCredentials.UserName.Password = doc.Root.Element("Credentials").Attribute("password").Value; 

     try 
     { 
      c.Open(); 
     } 
     catch (Exception ex) 
     { 

     } 
    } 

Comme vous pouvez le voir ci-dessus, je lis le nom d'utilisateur et mot de passe d'un nœud dans un fichier de vérification des pouvoirs xml pour valider le client. Est-il bon de l'avoir situé ici, parce qu'à l'origine, je l'avais défini dans ma méthode Valider:

public override void Validate(string userName, string password) 
    { 

     // XDocument doc = XDocument.Load(@"c:\Test\Test.xml"); 

     // userName = doc.Root.Element("Credentials").Attribute("username").Value; 
     // password = doc.Root.Element("Credentials").Attribute("password").Value; 


     if (string.IsNullOrEmpty(userName)) 
      throw new ArgumentNullException("userName"); 
     if (string.IsNullOrEmpty(password)) 
      throw new ArgumentNullException("password"); 

     // check if the user is not test 
     if (userName != "test" || password != "test") 
      throw new FaultException("Username and Password Failed"); 
    } 

Mais le problème avec ce qui précède est que tout ce que je passe dans c.ClientCredentials.UserName.UserName et c. ClientCredentials.UserName.Password est surchargé lorsqu'il atteint la méthode Validate. Par exemple, dans mon cliquez sur le bouton, si je viens:

c.ClientCredentials.UserName.UserName = "test1";
c.ClientCredentials.UserName.Password = "test1";

Le ci-dessus devrait échouer, mais quand il va dans la méthode validate où je lis le fichier xml qui a le nom d'utilisateur et mot de passe Attribuer comme test et test, ça passera.

En note, j'ai remarqué que ma méthode Validate est appelée, mais je n'arrive pas à intervenir. Les symboles du débogueur ne sont pas chargés.

+3

Pourquoi faites-vous de la sécurité vous, au lieu de compter sur construit dans les capacités de sécurité de WCF? –

+0

Pouvez-vous clarifier? J'utilise la substitution de la méthode Validate de UserNamePasswordValidator. N'est-ce pas comment le faire? Tout ce que je fais est de lire l'utilisateur et le mot de passe d'un fichier XML. – Xaisoft

+3

Non. La méthode consiste à utiliser soit les informations d'identification Windows (dans un environnement LAN/d'entreprise), soit à utiliser par exemple. le système d'adhésion ASP.NET. Laissez WCF faire toutes les vérifications et tout - vous venez de configurer l'endroit où il doit aller chercher des utilisateurs et des mots de passe valides. –

Répondre

1

vous écrasez le paramètre avec votre read

public override void Validate(string suppliedUserName, string suppliedPassword){ 
    // ... 
    string validUserName = doc.Root.Element("Credentials").Attribute("username").Value; 
    string validPassword = doc.Root.Element("Credentials").Attribute("password").Value; 
Questions connexes