2008-10-03 24 views

Respuesta

38

Compruebe la variable AUTH_USER petición. Esto estará vacío si su aplicación web permite el acceso anónimo, pero si su servidor está usando autenticación básica o integrada de Windows, contendrá el nombre de usuario del usuario autenticado.

En un dominio de Active Directory, si sus clientes están ejecutando Internet Explorer y sus web permisos de servidor/sistema de ficheros están configurados correctamente, IE silencio presenten sus credenciales de dominio a su servidor y AUTH_USER habrá MYDOMAIN\user.name sin que los usuarios tengan que conectarse de forma explícita en tu aplicación web

+2

es una pena que solo funciona con IE – Simurr

+1

solo IE pasa sus credenciales, otros navegadores solo solicitan, en cuyo caso solo necesita proporcionar sus credenciales de dominio (dominio \ nombre de usuario y contraseña). – CodeMonkey1313

+6

Firefox también admite la autenticación integrada (automática). ver https://developer.mozilla.org/en/Integrated_Authentication – VolkerK

1

Pero lo que puede hacer es tener el administrador de Active Directory LDAP permite que los usuarios puedan mantener un conjunto de credenciales

http://us2.php.net/ldap

+2

Usted don' t tiene que habilitar LDAP porque es un componente central de Active Directory. – VVS

4

Mire las funciones de la biblioteca PHP LDAP: http://us.php.net/ldap.

Active Directory [principalmente] se ajusta al estándar LDAP.

2

que probablemente podría authenticate theuser in Apache con mod_auth_kerb al requerir acceso autenticado a algunos archivos ... Creo que de esa manera, el nombre de usuario debe ser también disponible en variables de entorno de PHP en alguna parte ... probablemente sea mejor consultar con <?php phpinfo(); ?> una vez que lo ejecutas.

3

Si está utilizando Apache en Windows, puede instalar el mod_auth_sspi de

http://www.gknw.at/development/apache/httpd-2.2/win32/modules/mod_auth_sspi-1.0.4-2.2.2.zip

instrucciones están en el archivo INSTALL, y hay un ejemplo whoami.php. (Solo se trata de copiar el archivo mod_auth_sspi.so en una carpeta y agregar una línea en httpd.conf.)

Una vez que está instalado y se realizan las configuraciones necesarias en httpd.conf para proteger los directorios que desea, PHP poblará el $_SERVER['REMOTE_USER'] con el usuario y el dominio ('USER \ DOMAIN') del usuario autenticado en IE, o le pedirá y autenticará en Firefox antes de pasarlo.

La información está basada en sesiones, por lo que solo (ish) firmar es posible incluso en Firefox ...

-Craig

+1

Enlace roto, corregir con: http://sourceforge.net/projects/mod-auth-sspi/ – PiTheNumber

0

Se puede decir getenv('USERNAME')

+0

Pero necesita instalar un módulo Apache para usar esta función. 'apt-get install libapache2-authenntlm-perl' – SatanicGeek

+1

Esto solo le dará el nombre de la Computadora. – Mike

6

Tengo PHP MySQL se ejecuta en IIS - Puedo utilizar $_SERVER["AUTH_USER"] si enciendo la autenticación de Windows en IIS -> Autenticación y desactivar la autenticación anónima (importante)

he utilizado esto para conseguir mi usuario y el dominio:

$user = $_SERVER['AUTH_USER']; 

$user devolverá un valor como: DOMAIN\username en nuestra red, y luego solo se eliminará el DOMAIN\ de la cadena.

Esto ha funcionado en IE, FF, Chrome, Safari (probado) hasta el momento.

+0

Tengo php ejecutándose en IIS y solo la Autenticación de Windows habilitada para este sitio. No tengo esta información. ¿Qué podría volver a verificar? – manou

0

obras get_user_name de la misma manera que getenv ('USERNAME');

tuve codificación (con cirílico) problemas usando getenv (USERNAME)

1

Si usted está buscando para la recuperación remota IDSID de usuario/nombre de usuario, utilice:

echo gethostbyaddr($_SERVER['REMOTE_ADDR']); 

Va a conseguir algo como iamuser1-mys.corp.company.com

Filtra el resto del dominio y solo puedes obtener el IDSID.

Para más información visite http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/

0

referencia a tratar de averiguar si también AUTH_USER es parte de un grupo de dominio en particular; una forma inteligente de hacerlo es t crear una carpeta bloqueada con archivos de texto (puede estar en blanco). Configure la seguridad para que solo tenga el grupo de seguridad/distribución que desea validar. Una vez que ejecute @file_get_contents (< --- arrojará una advertencia) ... si el usuario no tiene acceso de grupo, no podrá obtener el contenido del archivo y, por lo tanto, no tendrá acceso a ese grupo de AD en particular. Esto es simple y funciona maravillosamente.

0

Tenemos varios dominios en nuestro entorno, así que uso preg_replace con regex para obtener solo el nombre de usuario sin DOMAIN \.

preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]); 
-2

prueba este código:

$user= shell_exec("echo %username%"); 
    echo "user : $user"; 

que obtenga su ventanas (AD) nombre de usuario en php

+0

Esto solo le dará el nombre de Computadora – Katia

-1

Probé casi todas estas sugerencias, pero todos estaban devolviendo valores vacíos.Si alguien más tiene este problema, he encontrado esta función útil en php.net (http://php.net/manual/en/function.get-current-user.php):

get_current_user(); 
$username = get_current_user(); 
echo $username; 

Ésta era la única forma que finalmente fue capaz de conseguir nombre de usuario de Active Directory del usuario. Si ninguna de las respuestas anteriores ha funcionado, pruébelo.

+0

Creo que de esta manera usted obtiene al usuario que está ejecutando su PHP en el servidor y no al usuario que ha iniciado sesión en su máquina y envía una solicitud desde un navegador web a su página PHP . En este caso, es posible que tenga un agujero de seguridad grave, ya que su página PHP se está ejecutando como un usuario completamente diferente con diferentes permisos. – JustAMartin

+0

@JustAMartin He estado probando esto durante los últimos meses, y constantemente recibo al usuario que está conectado en la máquina y accediendo al sitio web generado por mi PHP, y no al revés. –

0

Este es un ejemplo simple de integración NTLM AD, permite el inicio de sesión único con Internet Explorer, requiere inicio de sesión/configuración en otros navegadores.

PHP Ejemplo

<?php 
$user = $_SERVER['REMOTE_USER']; 
$domain = getenv('USERDOMAIN'); 

?> 

En su archivo httpd.conf de Apache

LoadModule authnz_sspi_module modules/mod_authnz_sspi.so 

<Directory "/path/to/folder"> 
    AllowOverride  All 
    Options   ExecCGI 
    AuthName   "SSPI Authentication" 
    AuthType   SSPI 
    SSPIAuth   On 
    SSPIAuthoritative On 
    SSPIOmitDomain On 
    Require   valid-user 
    Require   user "NT AUTHORITY\ANONYMOUS LOGON" denied 
</Directory> 

Y si necesita el módulo, este enlace es útil:

https://www.apachehaus.net/modules/mod_authnz_sspi/

Cuestiones relacionadas