Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Помощь с Active Directory (http://forum.oszone.net/showthread.php?t=122232)

magwolf 07-11-2008 12:53 945819

Помощь с Active Directory
 
Здравствуйте. Есть локальная сеть организации, Active Directory, есть Intranet сайт, который работает на веб-сервере Apache под управлением Win2003 . Возможно ли сделать так, чтобы при регистрации пользователь видел свой логин в Active Directory. И если возможно то как?

Blast 07-11-2008 12:59 945823

Мне кажется, что это должно вам подойти: Скрипт на PHP, который отображает имя пользователя, имя домена и имя его компьютера

Код скрипта

PHP код:

<?php 



/* 
L'identification par NTLM se fait en 6 etape : 

etape: | type:      | Info echange 
-------|----------------|-------------------------------------------------- 
    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();    // Recuperation des l'entetes 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 verifit que le client soit en NTLM 
     
     
        
$chaine=$headers['Authorization'];                   
        
$chaine=substr($chaine5);             // 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" a 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 supplementaire 
            
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"
         
        } 

    } 



?>


magwolf 07-11-2008 13:37 945855

Низкий вам поклон.

Blast 07-11-2008 19:03 946189

на здоровье :)

Sham 09-11-2008 11:32 947635

надо вместо "полезное сообщение" сделать "поклониться автору" :)

dima1981 10-11-2008 01:06 948181

Цитата:

Цитата Sham
надо вместо "полезное сообщение" сделать "поклониться автору »

мне кажется нормально, это отражает участие авторов в форуме, конечно качество благодарностей не берется в расчет, те несоображающие например я, не могут всю суть например авторского кода осознать и по настоящему оценить его эфективность, понимающий програмист конечно может сказать код безполезный не стоящий поклона и привести большое количество обоснований и т.д. но это уровень куда повыше и понимаю не для этого форума или вам нужен тут строгий контроль сообщений и тогда да тут смогут рождаться супер коды и т.п. путям консолидации усилий и знаний многих професиональных програмистов, но тогда этот форум станет не тем форумом, которым он является щас и нам придется подберать что то опять какой то форум устроенный, как и этот, поэтому огромная благодарность всем кто поддерживает этот форум, хорошо что он такой как щас есть, но благодарности ставятся за оказанную увслугу и за помощь и не за то, что тут совершаются открытия, которые являются открытиями века и предоставляются совершенные коды'


Время: 14:45.

Время: 14:45.
© OSzone.net 2001-