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 :

Authentification Proxy NTML


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 4
    Points
    4
    Par défaut Authentification Proxy NTML
    Bonjour,

    J'essaie d'établir une connexion entre un client et un proxy configuré pour authentifier les utilisateurs via le protocole NTLM (en checkant sur un active directory si l'utilisateur fait bien parti du domaine).

    Impossible d'authentifier l'utilisateur, j'ai beau chercher sur google, je ne trouve rien.

    J'ai regardé ce qu'il se passait sur le réseau, j'ai bien ma première requète GET qui est envoyée au proxy, il me retourne une erreur 407 Proxy Authentication Required, puis plus rien ne ce passe. Normalement, je devrais suivre le protocole NTLM en négociant avec le proxy et en lui passant mes identifiant, mais rien ne ce produit.

    Voici mon 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
    WebRequest request = WebRequest.Create("http://www.google.fr");
     
    		WebProxy Proxy = new WebProxy();
    		Proxy.Address = new Uri("http://192.168.0.69:3128");
    		Proxy.Credentials = CredentialCache.DefaultCredentials;
    		request.Proxy = Proxy;		
     
    		HttpWebResponse response = null;
    		try
    		{
    			request.PreAuthenticate = true;
    		    response = (HttpWebResponse)request.GetResponse();
    		} catch ( WebException wx) {
    			Debug.Log( wx.Status);
    			Debug.Log(((HttpWebResponse)wx.Response).StatusCode);
    		}
    Toute aide sera la bienvenue! Si je ne suis pas clair, dites le!
    Merci d'avance,
    Sennin.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    J'ai qu'une petite idée de la problématique, donc comme toute aide est la bienvenue je me lance :

    En théorie,
    Tu peux utiliser les informations stockées dans IE en utilisant directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    webProxy = GlobalProxySelection.Select as WebProxy; // si quelqu'un peu me dire au passage comment faire sauter le deprecated ici je n'y suis jamais arrivé avec le meme résultat !
                    webProxy.UseDefaultCredentials = true;
    soit utilisant une connexion avec login / mdp: (pourquoi pas ceux utiliser dans l'AD)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                WebProxy webProxy = null;
     
                webProxy = new WebProxy("host", "NumPort");
                webProxy.BypassProxyOnLocal = true;
     
                if (utiliser un login)
                    webProxy.Credentials = new NetworkCredential("login", "mdp");
                else
                    webProxy.UseDefaultCredentials = true;

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Si j'utilise ta première solution :

    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
    		WebRequest request = WebRequest.Create("http://www.google.fr");
     
    		WebProxy Proxy = new WebProxy();
    		Proxy = GlobalProxySelection.Select as WebProxy;
    		Proxy.UseDefaultCredentials = true;
    		request.Proxy = Proxy;
    		HttpWebResponse response = null;
    		try
    		{
    			request.PreAuthenticate = true;
    		    response = (HttpWebResponse)request.GetResponse();
    		} catch ( WebException wx) {
    			Debug.Log( wx.Status);
    			Debug.Log(((HttpWebResponse)wx.Response).StatusCode);
    		}
    	}
    J'obtiens un connection failed, je pense que c'est parce qu'il n'a pas réussi à récupérer les paramètres de IE.

    J'ai oublié de précisé une chose qui a son importance je pense, c'est que je travaille dans le développement d'une application standalone, donc pas une appli intégrée dans un navigateur. Merci de ton aide en tout cas, à plusieurs on va forcément trouver quelque chose!

    Une chose est sure d'après mes recherches, c'est que la solution se trouve dans la classe Web Proxy, mais encore faut il la trouver!

    Edit :

    La deuxième solution marche avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    		WebRequest request = WebRequest.Create("http://www.google.fr");
            WebProxy webProxy = null;
          	webProxy = new WebProxy("http://192.168.0.69:3128", false);
            if (bProxyLogin)
                webProxy.Credentials = new NetworkCredential("login", "mdp");
            else
                webProxy.UseDefaultCredentials = true;
    		request.Proxy = webProxy;
    		HttpWebResponse response = null;
    Mais le problème c'est que je dois renseigner les identifiants, alors qu'il faudrait que l'appli récupère les identifiants windows, comme le ferait le navigateur.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    Ok, en fait tu cherches à avoir une "authentification transparente", genre une fois connecté au domaine, c'est transparent...

    je en sais pas comment faire / je ne sais pas si ca existe ce type d’authentification

    Typiquement tu lance Firefox (ou un navigateur pas connu) et ca se connecte naturellement sur ton environnement ????

    parce que si c est pas le cas, je ne vois que les 2 autres choix que j'ai proposé: récupérer les infos stocké dans Windows (internet explorer), soit par login/mdp...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    Citation Envoyé par sennin Voir le message
    Mais le problème c'est que je dois renseigner les identifiants, alors qu'il faudrait que l'appli récupère les identifiants windows, comme le ferait le navigateur.
    la s’arrête mes compétences justement...
    tu peux me confirmer qu'avec un navigateur genre firefox, t a rien à configurer ? (au moins renseigner le proxy.pac non ?)

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Exact, c'est ce que je cherche à faire.

    C'est le protocole NTLM qui fonctionne comme ça, et les navigateurs sont conçus pour fonctionner avec.

    En gros t'as un proxy qui est configuré pour chercher si il utilisateurs sont authentifiés auprès de l'active directory, toi t'as ton navigateur qui est configuré pour utiliser le proxy. Quand tu cherche à te connecter, le proxy t'envoie balader une première fois puis instancie une "négociation". Là, le navigateur envoi les identifiants windows si t'es connecté au même domaine que l'active directory, si c'est pas le cas, il te les demande (boite de dialogue), et le proxy fait le reste.

    Dans mon appli je veux reproduire ce que fait le navigateur (sans l'option boite de dialogue), c'est a dire faire une requête vers l'extérieur et répondre comme il faut que proxy en passant les identifiants windows. Normalement C# gère tout seul ces échanges. Mais peut être que je dois aussi me faire un script qui récupère les identifiants windows si c'est pas le cas, pour utiliser la deuxième solution qui a l'air de marcher.

    Edit : pourtant il me semblait que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                webProxy.UseDefaultCredentials = true;
    était censé passer les identifiants windows, jme trompe?

    Edit 2 : d'après la doc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Assign the credentials of the logged in user or the user being impersonated.
    myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;
    Ceci devrait normalement envoyer les identifiants avec la requête, étrange que ça ne fonctionne pas...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    La doc dit:
    http://msdn.microsoft.com/en-us/library/yk7437c8.aspx

    ca aide pas beaucoup

    (merci pour l'explication plus haut )

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Ouaip c'est par là que j'ai commencé, mais une note du rédacteur m'a un peu perturbé :

    Note

    NTLM authentication does not work through a proxy server.

Discussions similaires

  1. Erreur d'authentification proxy
    Par squallJ dans le forum Forms
    Réponses: 2
    Dernier message: 11/03/2010, 15h28
  2. Réponses: 0
    Dernier message: 21/01/2010, 10h10
  3. Authentification proxy en java
    Par DevServlet dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 08/01/2010, 11h08
  4. Authentification proxy pour un appel a un webservice
    Par totoen dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/07/2008, 16h47
  5. Authentification Proxy C#
    Par perezlyon dans le forum C#
    Réponses: 5
    Dernier message: 05/10/2007, 16h40

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