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?
Ü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.
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.
Schauen Sie sich die Funktionen der PHP LDAP-Bibliothek an: http://de.php.net/ldap .
Active Directory entspricht weitgehend dem LDAP-Standard.
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
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.
Sie können getenv('USERNAME')
sagen
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
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/
Nein. Sie können jedoch Ihren Active Directory-Administrator LDAP aktivieren, damit Benutzer einen Satz von Anmeldeinformationen verwalten können
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"]);
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:
Verwenden Sie diesen Code:
Shell_exec("wmic computersystem get username")
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.
get_user_name funktioniert genauso wie getenv ('USERNAME');
Ich hatte Probleme mit der Kodierung (mit kyrillisch) mit getenv ('USERNAME').