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

Langage PHP Discussion :

Récupération session Windows en PHP


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut Récupération session Windows en PHP
    Bonjour,

    Je cherche a récupérer la session Windows courante en php.
    J'avais trouvé le code ci-dessous mais j'ai toujours le message "NTLM Flag error!"
    quelqu'un aurait il une solution ou une autre méthode.

    Mon but est de récupérer le login Windows de vérifier son existance dans mon Active directory et l'appartenance à un groupe.

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
     
    session_start();
    $headers = apache_request_headers(); // Récupération des l'entêtes client
    if (@$_SERVER['HTTP_VIA'] != NULL){ // nous verifions si un proxy est utilisé : parceque l'identification par ntlm ne peut pas passer par un proxy
    echo "Proxy bypass!";
    }
    elseif($headers['Authorization'] == NULL){ //si l'entete autorisation est inexistante
    header( "HTTP/1.0 401 Unauthorized" ); //envoi au client le mode d'identification
    header( "WWW-Authenticate: NTLM" ); //dans notre cas le NTLM
    exit; //on quitte
    }
    if(isset($headers['Authorization'])) //dans le cas d'une authorisation (identification)
    {
    if(substr($headers['Authorization'],0,5) == 'NTLM '){ // on vérifit que le client soit en NTLM
    $chaine=$headers['Authorization'];
    $chaine=substr($chaine, 5); // recuperation du base64-encoded type1 message
    $chained64=base64_decode($chaine); // decodage base64 dans $chained64
    if(ord($chained64{8}) == 1){
    // |_ byte signifiant l'etape du processus d'identification (etape 3)
    // verification du drapeau NTLM "0xb2" à l'offset 13 dans le message type-1-message (comp ie 5.5+) :
    if (ord($chained64[13]) != 178){
    echo "NTLM Flag error!";
    exit;
    }
    $retAuth = "NTLMSSP".chr(000).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
    $retAuth .= chr(000).chr(040).chr(000).chr(000).chr(000).chr(001).chr(130).chr(000).chr(000);
    $retAuth .= chr(000).chr(002).chr(002).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000);
    $retAuth .= chr(000).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
    $retAuth64 =base64_encode($retAuth); // encode en base64
    $retAuth64 = trim($retAuth64); // enleve les espaces de debut et de fin
    header( "HTTP/1.0 401 Unauthorized" ); // envoi le nouveau header
    header( "WWW-Authenticate: NTLM $retAuth64" ); // avec l'identification supplémentaire
    exit;
    }
    else if(ord($chained64{8}) == 3){
    // |_ byte signifiant l'etape du processus d'identification (etape 5)
    // on recupere le domaine
    $lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); // longueur du domain
    $offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); // position du domain.
    $domain = str_replace("\0","",substr($chained64, $offset_domain, $lenght_domain)); // decoupage du du domain
    //le login
    $lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); // longueur du login.
    $offset_login = (ord($chained64[41])*256 + ord($chained64[40])); // position du login.
    $login = str_replace("\0","",substr($chained64, $offset_login, $lenght_login)); // decoupage du login
    if ( $login != NULL){
    // stockage des données dans des variable de session
    $_SESSION['Login']=$login;
    header("Location: newpage.php");
    exit;
    }
    else{
    echo "NT Login empty!";
    }
    }
    }
    }
    ?>
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    si je ne me trompe pas, c'est du spécifique IE ça, non ?
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    Je ne suis pas certains en tout cas j'ai la même erreur sur firefox et IE.
    Sur le forum ou j'ai trouvé ce code il parlais aussi de firefox

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    je suis tombé sur ça, http://www.developpez.net/forums/d10...ive-directory/
    ça parle en effet de firefox.

    la réponse à sa question c'est: "il manque session_start()".
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  5. #5
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pourquoi tu ne nous montres pas le message d'erreur?
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  6. #6
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    Le message d'erreur je l'ai mis plus haut, c'est juste "NTLM Flag error!"

  7. #7
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    je ne sais pas. je sais pas ce que ton navigateur envoie au serveur et je ne sais pas pourquoi cet octet à cet offset.

    Demande au programmateur original ou sur msdn.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  8. #8
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Ca me paraît être une usine à gaz ta solution....

    C'est super galère de récup le login du client...

    Y'a éventuellement le code ci-dessous en javascript mais c'est un activeX et ça necessite d'utiliser IE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var obj = new ActiveXObject('WScript.Network');
    var url = 'http://ton_intranet/page.php?utilisateur=' + obj.UserName;
    window.location.href = url;
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

  9. #9
    Membre habitué
    Profil pro
    DevOps
    Inscrit en
    Décembre 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Décembre 2008
    Messages : 254
    Points : 144
    Points
    144
    Par défaut
    OK merci pour votre aide.

    Je pensais que c'était faisable mais en faite a priori ce n'est pas vraiment possible ou alors trop contrénient pour moi (IE, ActiveX ...)

    je clos le sujet.

Discussions similaires

  1. php obtenir le login de la session windows
    Par kevin254kl dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2014, 10h24
  2. Réponses: 7
    Dernier message: 16/01/2013, 10h32
  3. Récupération du Password de la session Windows
    Par DEMMAR dans le forum SAS Base
    Réponses: 1
    Dernier message: 26/10/2012, 10h47
  4. Récupération login session windows
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 26/08/2006, 10h28
  5. Réponses: 13
    Dernier message: 14/01/2004, 16h35

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