IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

[WCF] Informations d'identification client ?


Sujet :

Services Web

  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de rayon
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de rayon
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut [WCF] Informations d'identification client ?
    Voilà mon problème et j'espère poster au bon endroit ^^
    J'ai suivi ce tutoriel : http://badger.developpez.com/tutorie...atez-avec-WCF/ pour faire un serveur de chat en WCF. En local tout fonctionne parfaitement. J'ai lance le logiciel serveur sur un serveur dédié et j'ai essayer de me connecter depuis mon ordinateur et j'ai l'erreur suivante lors de la connexion : "le serveur a rejeté les informations d'identification client".
    D'où ça vient ? Comment résoudre ce problème ? Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Responsable de rayon
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de rayon
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    Personne n'a d'idée ? Je peux envoyer le code si ça peut aider.

  3. #3
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Il s'agit d'un problème d'identification du client sur le serveur.

    Tu peux par exemple effectuer les manips suivantes:

    Sur le serveur dédié tu créés un compte utilisateur (même login, même mot de passe) identique à celui sur lequel tu lances le client.

    Tu modifies le fichier de config de l'hôte pour lui dire d'utiliser l'autentification Windows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>      
          <service behaviorConfiguration="ChatServices.ChatWCFBehavior"
            name="ChatServices.ChatWCF">        
            <endpoint address="ChatWCF" 
                      binding="netTcpBinding" 
                      contract="ChatContrats.IChatWCF"
          bindingConfiguration="configwin">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="<a href="http://localhost:8731/Design_Time_Addresses/ChatServices/" target="_blank">http://localhost:8731/Design_Time_Ad.../ChatServices/</a>" />
                <add baseAddress="net.tcp://localhost:8732/ChatServices/" />
              </baseAddresses>          
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="ChatServices.ChatWCFBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <!-- mettre à true pour la phase de tests seulement -->
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>      
        </behaviors>
     <bindings>
      <netTcpBinding>
       <binding name="configwin">
        <security mode="Message">
         <message clientCredentialType="Windows"/>
        </security> 
       </binding>
      </netTcpBinding>
     </bindings>
      </system.serviceModel>
    </configuration>
    Idem coté client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <client>
          <endpoint address="net.tcp://adresse-di-serveur:8732/ChatServices/ChatWCF/"
                    binding="netTcpBinding"
                    contract="ChatContrats.IChatWCF"
                    name="configClient" 
        bindingConfiguration="configwin" />
        </client>
     <bindings>
      <netTcpBinding>
       <binding name="configwin">
        <security mode="Message">
         <message clientCredentialType="Windows"/>
        </security> 
       </binding>
      </netTcpBinding>
     </bindings> 
      </system.serviceModel>
    </configuration>
    Et là ça devrait fonctionner.


    Maintenant tu ne veux peut-être pas créer un compte sur le serveur pour chaque utilisateur du chat (sauf si tu possède un domaine Windows). Tu peux alors te tourner vers une autentification personnalisée.
    Pour cela regarde du coté de UserNamePasswordValidator.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  4. #4
    Membre confirmé
    Homme Profil pro
    Responsable de rayon
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de rayon
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    Merci, d'après ce que j'ai trouvé sur msdn il faut générer un certificat sur le serveur. Est-on vraiment obligé ?

  5. #5
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Pas si tu ne veux pas utiliser d'autentification par certificat.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  6. #6
    Membre confirmé
    Homme Profil pro
    Responsable de rayon
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de rayon
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    Merci beaucoup pour ton aide. J'ai toutefois un problème. J'ai essayer d'adapter le code trouvé et le client ne se connecte plus du tout. J'ai l'erreur suivante :
    La connexion de socket a été abandonné. Ceci peut être causé par une erreur lors du traitement de votre message, par le dépassement du délai d’attente de réception par l’hôte distant ou par un problème de ressource réseau sous-jacent. Le délai d’attente de socket local était «*00:00:59.9531250*».
    Je joins une partie de mon code.
    Côté client
    app.config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <client>
          <endpoint address="net.tcp://localhost:8732/W33Connect/W33Server/" binding="netTcpBinding" bindingConfiguration="Binding" contract="W33Connect.IW33Chat" name="configClient" />      
        </client>
     
        <bindings>
          <netTcpBinding>
            <binding name="Binding">
              <security mode="Message">
                <message clientCredentialType="UserName" />
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
     
      </system.serviceModel>
    </configuration>
    Dans Form1.cs, la méthode pour me connecter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private void ConnexionChat(string pseudo)
            {
                if (string.IsNullOrEmpty(pseudo))
                    return;
                channelFactory = new DuplexChannelFactory<IW33Chat>(this, "configClient");
                channelFactory.Credentials.UserName.UserName = pseudo;
                channelFactory.Credentials.UserName.Password = "1";
                chat = channelFactory.CreateChannel();
                channelFactory.Opened += new EventHandler(channelFactory_Opened);
                channelFactory.Closed += new EventHandler(channelFactory_Closed);
                try
                {
                    chat.DemarrerSession(pseudo, "");
                }
                catch (Exception ex)
                {
                    richTextBox1.AppendText(ex.Message);
                    richTextBox1.AppendText("\r\n");
                }
            }
    Côté serveur
    app.config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="W33Connect.W33Server">
            <endpoint address="W33Server" binding="netTcpBinding" bindingName="Binding" contract="W33Connect.IW33Chat" />
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:8732/W33Connect/" />
              </baseAddresses>
            </host>
          </service>
        </services>
     
        <bindings>
          <netTcpBinding>
            <!-- username binding -->
            <binding name="Binding">
              <security mode="Message">
                <message clientCredentialType="UserName" />
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
     
      </system.serviceModel>
    </configuration>
    Dans Form1.cs, la méthode pour démarrer le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    host.Opened += new EventHandler(host_Opened);
    host.Closed += new EventHandler(host_Closed);
    host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom;
    host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameValidator();
    host.Open();
    Log.Write("Démarrage du service");
    J'ai mit des points d'arrêt sur ma méthode pour vérifier les logins mais elle n'est jamais appellée.
    Comment faire ? Merci. Dites-moi s'il vous faut d'autres parties du code.

  7. #7
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    T'as essayé avec l'authentification Windows pour voir si ça fonctionné ?

    Sinon, il te manque la section behavior (et serviceCredentials) dans le fichier de config.
    Regarde par ici: http://msdn.microsoft.com/en-us/library/aa702565.aspx


    Tu peux aussi spécifier ta classe CustomUserNameValidator directement depuis le fichier de config sans passer par le code comme tu fais.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  8. #8
    Membre confirmé
    Homme Profil pro
    Responsable de rayon
    Inscrit en
    Juin 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de rayon
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 86
    Par défaut
    J'ai essayé de créer un compte Admin avec les mêmes identifiants que mon poste. Le résultat est le même : il me refuse la connection à cause de l'identification qui est incorrecte. J'ai modifié pour faire mon propre validateur. Cette fois j'arrive bien à me connecter mais idem : Le serveur a rejeté les informations d'identification du client.

    Voici les app.config modifiés :
    Côté serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="W33Connect.W33Server" behaviorConfiguration="W33Behavior">
            <endpoint address="W33Server" binding="netTcpBinding" bindingName="Binding" contract="W33Connect.IW33Chat" />
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:8732/W33Connect/" />
              </baseAddresses>
            </host>
          </service>
        </services>
     
        <bindings>
          <netTcpBinding>
            <!-- username binding -->
            <binding name="Binding">
              <security mode="Transport">
                <message clientCredentialType="UserName" />
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
     
        <behaviors>
          <serviceBehaviors>
            <behavior name="W33Behavior">
              <serviceCredentials>
                <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="W33Connect.W33Server+CustomUserNameValidator, W33Connect" />
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
     
      </system.serviceModel>
    </configuration>
    Et côté client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <client>
          <endpoint address="net.tcp://localhost:8732/W33Connect/W33Server/" binding="netTcpBinding" behaviorConfiguration="ClientCertificateBehavior" bindingConfiguration="Binding" contract="W33Connect.IW33Chat" name="configClient" />
        </client>
     
        <bindings>
          <netTcpBinding>
            <binding name="Binding">
              <security mode="Transport">
                <message clientCredentialType="UserName" />
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
     
        <behaviors>
          <endpointBehaviors>
            <behavior name="ClientCertificateBehavior">
              <clientCredentials>
                <serviceCertificate>
                  <authentication certificateValidationMode="PeerOrChainTrust" />
                </serviceCertificate>
              </clientCredentials>
            </behavior>
          </endpointBehaviors>
        </behaviors>
     
      </system.serviceModel>
    </configuration>
    Bien entendu pour les tests à distance, je remplace "localhost" par l'adresse IP du serveur. Est-ce un problème de certificat ? ce que je ne comprend pas c'est que lors du debug en local, jamais les points d'arrêts sur ma classe "CustomUserNameValidator" ne sont atteints. Donc effectivement, la vérification d'identifiant ne se fait pas.

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    Un mois plus tard, mais vos échanges m'ont été très utile...
    Passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <bindings>
          <netTcpBinding>
            <!-- username binding -->
            <binding name="Binding">
              <security mode="Transport">
                <message clientCredentialType="UserName" />
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
    En
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <bindings>
          <netTcpBinding>
            <!-- username binding -->
            <binding name="Binding">
              <security mode="None" />
            </binding>
          </netTcpBinding>
        </bindings>
    Coté client et coté serveur.
    Et tu n'auras plus de soucis d'authentification... Par contre n'importe qui peut accéder a n'importe quoi, donc prévoir des méthodes d'authentification embarqué au sein de ton code derrière WCF

Discussions similaires

  1. [oracle xe] Informations d'identification et de connexion non valides
    Par pheather dans le forum Connexions aux bases de données
    Réponses: 4
    Dernier message: 23/05/2008, 15h22
  2. Informations d'identification et de connexion d'hôte?
    Par wiemsassi dans le forum Entreprise Manager
    Réponses: 8
    Dernier message: 03/03/2008, 21h54
  3. Gestion et identification client
    Par Odcfrombelgium dans le forum Autres Logiciels
    Réponses: 21
    Dernier message: 27/09/2006, 12h44
  4. [Oracle9iR2] OEM : informations d'identification et de connexion
    Par piotrek30 dans le forum Entreprise Manager
    Réponses: 4
    Dernier message: 07/06/2006, 10h57
  5. Enregistrer les informations de connexion client RDP
    Par genialk2000 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 31/01/2006, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo