J'ai une application Web PHP sur un intranet qui peut extraire l'adresse IP et le nom d'hôte de l'utilisateur actuel sur cette page, mais je me demandais s'il était possible d'obtenir/d'extraire également leur nom d'utilisateur Active Directory/Windows. . Est-ce possible?
Vérifiez la variable de requête AUTH_USER
. Ce sera vide si votre application Web autorise un accès anonyme, mais si votre serveur utilise une authentification de base ou une authentification intégrée à Windows, il contiendra le nom d'utilisateur de l'utilisateur authentifié.
Dans un domaine Active Directory, si vos clients exécutent Internet Explorer et que vos autorisations de serveur Web/système de fichiers sont configurées correctement, IE soumettra en mode silencieux les informations d'identification de domaine à votre serveur et AUTH_USER
sera MYDOMAIN\user.name
sans que les utilisateurs aient à se connecter dans votre application web.
Php mysql tourne sur IIS - Je peux utiliser $_SERVER["AUTH_USER"]
si j'active l'authentification Windows dans IIS -> Authentification et désactive l'authentification anonyme (important)
J'ai utilisé cela pour obtenir mon utilisateur et mon domaine:
$user = $_SERVER['AUTH_USER'];
$user
renverra une valeur telle que: DOMAIN\username
sur notre réseau, puis il suffira de supprimer le DOMAIN\
de la chaîne.
Cela a fonctionné dans IE, FF, Chrome, Safari (testé) jusqu'à présent.
Examinez les fonctions de la bibliothèque LDAP PHP: http://us.php.net/ldap .
Active Directory [généralement] est conforme à la norme LDAP.
Si vous utilisez Apache sous Windows, vous pouvez installer le module mod_auth_sspi à partir de
https://sourceforge.net/projects/mod-auth-sspi/
Les instructions sont dans le fichier INSTALL et il y a un exemple avec whoami.php. (Il suffit de copier le fichier mod_auth_sspi.so dans un dossier et d’ajouter une ligne dans httpd.conf.)
Une fois installé et les paramètres nécessaires définis dans httpd.conf pour protéger les répertoires souhaités, PHP remplira le $_SERVER['REMOTE_USER']
avec l'utilisateur et le domaine ('USER\DOMAIN') de l'utilisateur authentifié dans IE - ou Invitez et authentifiez-vous dans Firefox avant de le transmettre.
Les informations sont basées sur les sessions, de sorte que la connexion unique (ish) est possible même dans Firefox ...
-Craig
Vous pourriez probablement authentifier leutilisateur dans Apache avec mod_auth_kerb en exigeant un accès authentifié à certains fichiers… Je pense que de cette façon, le nom d'utilisateur devrait également être disponible dans PHP Les variables d'environnement quelque part… probablement préférable de vérifier avec <?php phpinfo(); ?>
une fois que vous l'avez exécuté.
Vous pouvez dire getenv('USERNAME')
Découvrez le module d'authentification NTLM corrigé pour Apache https://github.com/rsim/mod_ntlm
Basé sur le module d'authentification NTLM pour Apache/Unix http://modntlm.sourceforge.net/
En savoir plus sur http://blog.rayapps.com/
Source: http://imthi.com/blog/programming/leopard-Apache2-ntlm-php-integrated-windows-authentication.php
Si vous recherchez la récupération d'un IDSID/nom d'utilisateur d'utilisateur distant, utilisez:
echo gethostbyaddr($_SERVER['REMOTE_ADDR']);
Vous obtiendrez quelque chose commeiamuser1-mys.corp.company.com
Filtrez le reste du domaine derrière et vous ne pourrez obtenir que l'identifiant idsid.
Pour plus d'informations, visitez http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/
Non, mais vous pouvez demander à votre administrateur Active Directory d'activer le protocole LDAP afin que les utilisateurs puissent conserver un ensemble d'informations d'identification.
Nous avons plusieurs domaines dans notre environnement, donc j'utilise preg_replace avec regex pour obtenir uniquement le nom d'utilisateur sans DOMAIN \.
preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
C’est un exemple simple d’intégration NTLM AD, autorise l’ouverture de session unique avec Internet Explorer, nécessite une connexion/configuration dans d’autres navigateurs.
Exemple PHP
<?php
$user = $_SERVER['REMOTE_USER'];
$domain = getenv('USERDOMAIN');
?>
Dans votre fichier httpd.conf 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>
Et si vous avez besoin du module, ce lien est utile:
Référencement essayant également de déterminer si AUTH_USER fait partie d'un groupe de domaine particulier; une façon intelligente de le faire est de créer un dossier verrouillé avec des fichiers texte (peut être vide). Définissez la sécurité pour n’avoir que le groupe de sécurité/distribution que vous souhaitez valider. Une fois que vous avez exécuté @file_get_contents (<--- lancera un avertissement) ... si l'utilisateur ne dispose pas d'un accès au groupe, il ne pourra pas obtenir le contenu du fichier et n'aura donc pas accès à ce groupe AD particulier. C'est simple et fonctionne à merveille.
get_user_name fonctionne de la même manière que getenv ('USERNAME');
J'ai eu des problèmes d'encodage (avec le cyrillique) en utilisant getenv ('USERNAME')