it-swarm.com.de

Können Sie einen Windows-Benutzernamen (AD) in PHP erhalten?

Ich habe eine PHP - Webanwendung in einem Intranet, die die IP- und Hostnamen des aktuellen Benutzers auf dieser Seite extrahieren kann, aber ich habe mich gefragt, ob es einen Weg gibt, ihren Active Directory/Windows-Benutzernamen abzurufen bzw. zu extrahieren . Ist das möglich?

40
fuentesjr

Überprüfen Sie die Anforderungsvariable AUTH_USER. Diese Option ist leer, wenn Ihre Web-App anonymen Zugriff zulässt. Wenn Ihr Server jedoch eine grundlegende oder in Windows integrierte Authentifizierung verwendet, enthält er den Benutzernamen des authentifizierten Benutzers.

Wenn Ihre Clients in einer Active Directory-Domäne Internet Explorer ausführen und Ihre Webserver-/Dateisystemberechtigungen ordnungsgemäß konfiguriert sind, sendet IE die Domänenanmeldeinformationen im Hintergrund an Ihren Server und AUTH_USER wird MYDOMAIN\user.name sein, ohne dass sich die Benutzer explizit anmelden müssen in Ihre Web-App.

41
Dylan Beattie

Ich habe php mysql auf IIS ausgeführt - ich kann $_SERVER["AUTH_USER"] if verwenden, um die Windows-Authentifizierung in IIS zu aktivieren -> Authentifizierung und deaktiviere anonyme Authentifizierung

Ich habe dies verwendet, um meinen Benutzer und meine Domain zu erhalten:

$user = $_SERVER['AUTH_USER'];

$user gibt einen Wert wie: DOMAIN\username in unserem Netzwerk zurück, und dann wird nur der DOMAIN\ aus der Zeichenfolge entfernt.

Dies hat bisher in IE, FF, Chrome, Safari (getestet) funktioniert.

12
Schwarz.Oz

Schauen Sie sich die Funktionen der PHP LDAP-Bibliothek an: http://de.php.net/ldap

Active Directory entspricht weitgehend dem LDAP-Standard.

4
warren

Wenn Sie Apache unter Windows verwenden, können Sie mod_auth_sspi von installieren 

https://sourceforge.net/projects/mod-auth-sspi/

Anweisungen befinden sich in der INSTALL-Datei und es gibt ein Beispiel für whoami.php. (Es ist nur der Fall, wenn Sie die Datei mod_auth_sspi.so in einen Ordner kopieren und eine Zeile in httpd.conf hinzufügen.)

Sobald es installiert ist und die erforderlichen Einstellungen in httpd.conf zum Schutz der gewünschten Verzeichnisse vorgenommen wurden, füllt PHP den $_SERVER['REMOTE_USER'] mit dem Benutzer und der Domäne ('USER\DOMAIN') des authentifizierten Benutzers in IE - oder Fordern Sie die Authentifizierung in Firefox auf, bevor Sie sie übergeben.

Die Informationen sind sitzungsbasiert, daher ist eine Einzelanmeldung (ish) auch in Firefox möglich ...

-Craig

3
CrayFishUK

Sie könnten wahrscheinlich authentifizieren dieBenutzer in Apache mit mod_auth_kerb authentifizierten Zugriff auf einige Dateien benötigen ... Ich denke, auf diese Weise sollte der Benutzername auch verfügbar sein in PHP Umgebungsvariablen irgendwo ... wahrscheinlich am besten mit <?php phpinfo(); ?> überprüfen, sobald es läuft.

2
hangy

Sie können getenv('USERNAME') sagen

1
Someone

Checkt das NTLM-Authentifizierungsmodul mit Patch für Apache aus https://github.com/rsim/mod_ntlm

Basierend auf NTLM-Authentifizierungsmodul für Apache/Unix http://modntlm.sourceforge.net/

Lesen Sie mehr unter http://blog.rayapps.com/

Quelle: http://imthi.com/blog/programming/leopard-Apache2-ntlm-php-integrated-windows-authentication.php

1
blomman9

Wenn Sie nach Remote-Benutzer-IDSID/Benutzername suchen möchten, verwenden Sie:

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

Sie erhalten so etwas wieiamuser1-mys.corp.company.com

Filtern Sie den Rest der Domäne dahinter, und Sie können nur die IDsid abrufen. 

Weitere Informationen finden Sie unter http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/

1
Eddy Goh

Nein. Sie können jedoch Ihren Active Directory-Administrator LDAP aktivieren, damit Benutzer einen Satz von Anmeldeinformationen verwalten können

http://us2.php.net/ldap

1
Peter Bailey

Wir haben mehrere Domains in unserer Umgebung, also benutze ich preg_replace mit regex, um nur den Benutzernamen ohne DOMAIN\zu erhalten.

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

Dies ist ein einfaches NTLM AD-Integrationsbeispiel, das die einmalige Anmeldung mit Internet Explorer ermöglicht, die Anmeldung/Konfiguration in anderen Browsern erfordert.

PHP-Beispiel

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

?>

In Ihrer Apache-Datei httpd.conf

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>

Und wenn Sie das Modul benötigen, ist dieser Link hilfreich:

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

0
PodTech.io

Verwenden Sie diesen Code:

Shell_exec("wmic computersystem get username")
0
NightwingDFMX

Verweis beim Versuch, herauszufinden, ob AUTH_USER Teil einer bestimmten Domänengruppe ist; Eine clevere Methode dazu ist das Erstellen eines gesperrten Ordners mit Textdateien (kann leer sein). Legen Sie als Sicherheit nur die Sicherheits-/Verteilergruppe fest, die Sie überprüfen möchten. Nach dem Ausführen eines @file_get_contents (<--- wird eine Warnung ausgegeben) ... Wenn der Benutzer keinen Gruppenzugriff hat, können die Dateiinhalte nicht abgerufen werden, und der AD-Gruppenzugriff ist daher nicht möglich. Das ist einfach und funktioniert wunderbar.

0
George

get_user_name funktioniert genauso wie getenv ('USERNAME');

Ich hatte Probleme mit der Kodierung (mit kyrillisch) mit getenv ('USERNAME').

0
Kornilov Ruslan