Récupérer login windows d'un client [Apache => Windows && PHP4.2.0)

Récupérer login windows d'un client [Apache => Windows && PHP4.2.0) - PHP - Programmation

Marsh Posté le 23-04-2004 à 10:22:41    

Bonjour,
 
j'aurais besoin de récupérer le login windows des clients qui se connecterons sur mon fomulaire, afin de pré-remplire une parties des champs de mon formulaire (données stockés sur des BDs).
 
Pour cela, je dispose d'un serveur web apache (1.1) qui tourne sous windows, et de PHP (4.2.0). (Pack EasyPHP 1.6)
 
J'ai essayé phpinfo(), mais je ne trouve pas la variable dont j'ai besoin.
J'ai lu aussi, qu'il fallait installer le module mod_ntlm sur apache, configurer authtype en NTLM afin que la variable $_server['REMOTE_USER'] soit accessible.
Lorsque j'ai essayé de télécharger mod_ntlm sur http://modntlm.sourceforge.net, je me suis rendu compte qu'il s'agissait du module pour unix, et non pas pour windows :-/
 
 
Je pense donc avoir fait plus ou moins le tour de la question, et c'est vraiment en dernier recours que je me tourne vers vous :)
 
Merci d'avance
 

Reply

Marsh Posté le 23-04-2004 à 10:22:41   

Reply

Marsh Posté le 23-04-2004 à 14:09:16    

Un client bien configuré ne donnera jamais son login de windows?

Reply

Marsh Posté le 23-04-2004 à 14:14:23    

Super ta réponse :-/ ... si tu pouvais être un peu plus explicite...
En attendant, ça ne résoud toujours pas mon problème...
Quelqu'un d'autre aurait une solution ?

Reply

Marsh Posté le 23-04-2004 à 16:12:05    

C'est pourtant clair non ?  :heink:  
 
Balancer son login windows au premier script qui le demande serait une faille de sécurité, donc quelle que soit la méthode (et il n'y en a certainement pas de "toute faite" en php) il y a de fortes chances pour que le client refuse, donc le script ne marchera pas.
 
Peut-être qu'un truc client-side (applet, activeX ,...) pourrait y arriver, mais cela ne relève plus du php.

Reply

Marsh Posté le 09-08-2004 à 18:29:11    

A tous ;)
Voici une source que j'ai réalisé pour récuperer le login windows sans aucun module :p
 
(voir aussi http://www.phpcs.com/code.aspx?ID=25272 pour les mise à jour)
== Debut ==
 
<?php
 
/***********************************************************************
*   PHP NTLM GET LOGIN  
*   Version 0.2
* ====================================================    
*                                        
* Copyright (c) 2004 Nicolas GOLLET (Nicolas.gollet@secusquad.com)
* Copyright (c) 2004 Flextronics Saint-Etienne
*
* This program is free software. You can redistribute it and/or modify  
* it under the terms of the GNU General Public License as published by  
* the Free Software Foundation; either version 2 of the License.        
*
***********************************************************************/
 
 
/*
L'identification par NTLM se fait en 6 étape :
 
étape: | type:   | Info échangé
-------|----------------|--------------------------------------------------
    1  | C  --> S   | GET ...        legende : C = Client
-------|----------------|--------------------------------------------------         S = Serveur
    2  | C <--  S  | 401 Unauthorized
       |            | WWW-Authenticate: NTLM
-------|----------------|--------------------------------------------------
    3  | C  --> S   | GET ...
       |           | Authorization: NTLM <base64-encoded type-1-message>
-------|----------------|--------------------------------------------------
    4  | C <--  S  | 401 Unauthorized
       |           | WWW-Authenticate: NTLM <base64-encoded type-2-message>
-------|----------------|--------------------------------------------------
    5  | C  --> S   | GET ...
       |                | Authorization: NTLM <base64-encoded type-3-message>
-------|----------------|--------------------------------------------------    
    6  | C <--  S       | 200 Ok
-------|----------------|--------------------------------------------------
 
*/
 
 
 
$headers = apache_request_headers();  // Récupération des l'entêtes client
 
 
if($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 :
  if (ord($chained64[13]) != 178){
  echo "Votre navigateur Internet n'est pas compatible avec le NTLM, utiliser IE...Merci";
  exit;
  }
   $retAuth = "NTLMSSP";      
   $retAuth .= chr(0);      
   $retAuth .= chr(2);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(40);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(1);
   $retAuth .= chr(130);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(2);
   $retAuth .= chr(2);
   $retAuth .= chr(2);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   $retAuth .= chr(0);
   
   $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 = 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 = substr($chained64, $offset_login, $lenght_login); // decoupage du login
   
  // l'host  
  $lenght_host = (ord($chained64[47])*256 + ord($chained64[46])); // longueur de l'host.
  $offset_host = (ord($chained64[49])*256 + ord($chained64[48])); // position de l'host.  
  $host = substr($chained64, $offset_host, $lenght_host); // decoupage du l'host  
   
   
 
  echo "Domain is    : $domain";
  echo "<br>Login is : $login";
  echo "<br>host is  : $host";
   
  }
 
 }
 
}
 
 
?>
 
 

Reply

Marsh Posté le 23-06-2009 à 17:08:38    

help!!!!
J'ai exactement besoin de ce code, mais quand j'essaye de l'exécuter je n'y arrive pas...
 
Dans 1 premier temps j'ai un message d'erreur sur les lignes 32, 33
 
header( "HTTP/1.0 401 Unauthorized" );   //envoi au client le mode d'identification  
 header( "WWW-Authenticate: NTLM" );   //dans notre cas le NTLM  
 
et si je supprime les deux lignes je n'ai aucun message d'erreur mais pas non plus les informations attendues
 
echo "Domain is    : $domain";  
  echo "<br>Login is : $login";  
  echo "<br>host is  : $host";  
 
donc voilà, HELP

Reply

Marsh Posté le 25-06-2009 à 15:41:22    

gros déterrage de topic, ça...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed