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

C# Discussion :

Consommer webservice avec authentification basic


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 34
    Points : 32
    Points
    32
    Par défaut Consommer webservice avec authentification basic
    Bonjour je cherche à me connecter à un webservice pour réaliser des tests

    Une méthode sur ce webservice est disponible sans authentification mais les autres méthodes nécessitent une authentification "basic".

    Donc la connexion à la méthode non authentifié fonctionne, maitenant je souhaite voir dans le debug du webservice l'envoi de l'authentification mais cela ne fonctionne pas.

    Voici le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    NetworkCredential Auth = new NetworkCredential(login, hash);
    CredentialCache cache = new CredentialCache();
     
    MyService svc = new MyService();
     
    cache.Add(new Uri(svc.Url), "basic", Auth);
     
    svc.Credentials = cache;
    svc.PreAuthenticate = true; 
     
    //Status
    StatusReturn output = svc.status();
    Console.WriteLine("Result : " + output.statusMsg);
    Je ne comprend pas pourquoi l'authentification n'est pas envoyé vers le serveur.....

  2. #2
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Si ton WebService attend un couple Login/Pwd, celui-ci ne te propose pas une méthode te permettant de fournir ces informations?

    Sinon tu devrais essayer d'utiliser les "CredentialHeader" plutôt que le "CredentialCache"

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Alors voilà je reviens sur mon problème avec ce Webservice

    Je n'arrive pas à obtenir une réponse claire de personnes développant en .Net car la majorité font un Webservice et Développe le client pour eux et dans le même langage.

    Le propre d'un webservice est quand même d'être diffusé pour que des clients ou prestataires, puissent s'interfacer dessus avec leur propre langage

    Le webservice a été développé en PHP et propose un service en Document/literal Wrapper en version SOAP 1.2 sur HTTP avec une authentification "Basic"

    Et il a été validé avec des programmes clients en PHP, Java et Perl

    Je voudrais pouvoir le valider avec VB.Net et/ou C#

    Pour reprendre depuis le début :

    J'ai donc dans un premier temps Ajouter une référence de service puis avancé et Ajouter une référence web

    J'ai donc utilisé le code de mon premier post pour test le service.
    On va dire que le code fonctionne car la méthode qui sert de test retourne bien un résultat mais dans le débuggage du webservice le couple login/pass n'est pas reçu.

    Pour répondre à ludojojo: Est ce que CredentialHeader enverra un header soap ?

    Après mainte recherche j'ai décidé de faire juste une référence de service

    Et j'ai suivi cette information : http://jclagache.blogspot.com/2011/0...ttp-basic.html

    Et j'ai utilisé ce code

    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
     
    static void Main(string[] args)
            {
                string login = "";
                string password = "";
     
                Console.WriteLine("Login : ");
                login = Console.ReadLine();
                Console.WriteLine("Password: ");
                password = Console.ReadLine();
                Console.Clear();
     
                // Create a new instance of the MD5CryptoServiceProvider object.
                MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
     
                // Convert the input string to a byte array and compute the hash.	
                byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(login + "|" + password));
                StringBuilder sBuilder = new StringBuilder();
                for (int i = 0; i < data.Length; i++)
                {
                    sBuilder.Append(data[i].ToString("x2"));
                }
                string hash = sBuilder.ToString();
     
                Console.WriteLine("Login : " + login + ", Hash : " + hash);
     
                var client = new EntreprisePortClient(
                    new MyBasicHttpBinding(), 
                    new EndpointAddress("http://MyWebServiceUrl")
                );
     
                client.ClientCredentials.UserName.UserName = login;
                client.ClientCredentials.UserName.Password = hash;
     
                StatusReturn output = client.status();
                Console.WriteLine("Result : " + output.statusMsg);
     
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
     
            }

  4. #4
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par oxomichael Voir le message
    Pour répondre à ludojojo: Est ce que CredentialHeader enverra un header soap ?
    Oui!

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Donc ce n'est pas ce qui m’intéresse....

    Car en fait l'authentification basic envoi le login et le mot de passe encodé en base64 dans une chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GET /private/index.html HTTP/1.1
    Host: localhost
    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    On l'utilise souvent de cette façon, directement dans le navigateur
    http://login:pass@url

    Comme je ne suis pas un expert en C# et VB.Net, en tout cas je remarque que c'est plus compliqué que d'autre langage pour se connecter à un WebService.

    Est ce que quelqu'un aurait des explications, exemples de codes ?

  6. #6
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par oxomichael Voir le message
    Comme je ne suis pas un expert en C# et VB.Net, en tout cas je remarque que c'est plus compliqué que d'autre langage pour se connecter à un WebService.
    Je suis pas vraiement d'accord avec ce propos... J'utilise les WebServices tous les jours en C#, sans aucun problèmes. Tout dépend de comment est codé l'application et il faut connaitre la méthode à utiliser. C'est pareil dans tous les languages.

Discussions similaires

  1. QlikView & WebService avec Authentification
    Par progscoubi dans le forum QlikView
    Réponses: 12
    Dernier message: 16/10/2013, 16h39
  2. SL4 appel WebService Asmx avec authentification basic
    Par Tab dans le forum Silverlight
    Réponses: 1
    Dernier message: 01/03/2012, 09h35
  3. Webservice et authentification avec SecurityDomain + bdd
    Par goute dans le forum Services Web
    Réponses: 0
    Dernier message: 05/05/2010, 10h41
  4. Authentification "Basic" avec Tomcat
    Par curtis08 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 11/03/2010, 11h12
  5. [AJAX] consommer un webservice avec Ajax
    Par webfranc dans le forum AJAX
    Réponses: 7
    Dernier message: 21/01/2010, 01h32

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