你能用PHP获得Windows(AD)用户名吗?

你能用PHP获得Windows(AD)用户名吗?,php,windows,authentication,Php,Windows,Authentication,我在内联网上有一个PHP web应用程序,可以提取该页面上当前用户的IP和主机名,但我想知道是否有办法获取/提取他们的Active Directory/Windows用户名。这可能吗?不可能。但是您可以让Active Directory管理员启用LDAP,以便用户可以维护一组凭据 检查AUTH\u USER请求变量。如果您的web应用允许匿名访问,则此字段将为空,但如果您的服务器使用基本身份验证或Windows集成身份验证,则此字段将包含经过身份验证的用户的用户名 在Active Directo

我在内联网上有一个PHP web应用程序,可以提取该页面上当前用户的IP和主机名,但我想知道是否有办法获取/提取他们的Active Directory/Windows用户名。这可能吗?

不可能。但是您可以让Active Directory管理员启用LDAP,以便用户可以维护一组凭据


检查
AUTH\u USER
请求变量。如果您的web应用允许匿名访问,则此字段将为空,但如果您的服务器使用基本身份验证或Windows集成身份验证,则此字段将包含经过身份验证的用户的用户名


在Active Directory域中,如果您的客户端正在运行Internet Explorer,并且您的web服务器/文件系统权限配置正确,IE将以静默方式向您的服务器提交其域凭据,
AUTH_USER
将成为
MYDOMAIN\USER.name
,而用户无需显式登录到您的web应用程序。

查看PHP LDAP库函数:


Active Directory[主要]符合LDAP标准。

您可能需要对某些文件进行身份验证访问……我认为这样做,用户名也应该在PHP环境变量中的某个地方可用…可能最好在运行后使用
进行检查。

如果您在Windows上使用Apache,您可以从

安装文件中有说明,还有一个whoami.php示例。(这只是将mod_auth_sspi.so文件复制到一个文件夹中,并在httpd.conf中添加一行。)

一旦安装完毕并在httpd.conf中进行了必要的设置以保护您想要的目录,PHP将在IE中使用经过身份验证的用户的用户和域('USER\domain')填充
$\u服务器['REMOTE\u USER']
,或者在传入之前在Firefox中进行提示和身份验证

信息是基于会话的,所以即使在Firefox中也可以单点登录


-Craig

你可以说
getenv('USERNAME')
我在IIS上运行了php mysql-如果我在IIS中打开Windows身份验证->身份验证并关闭匿名身份验证,我可以使用
$\u服务器[“AUTH\u USER”]
(重要)

我已经使用它来获取我的用户和域:

$user = $_SERVER['AUTH_USER'];
$user
将在我们的网络上返回如下值:
DOMAIN\username
,然后从字符串中删除
DOMAIN\


到目前为止,这在IE、FF、Chrome和Safari(已测试)中都有效。

请查看针对Apache的修补NTLM身份验证模块

基于Apache/Unix的NTLM身份验证模块

阅读更多


来源:

get_user_name与getenv('USERNAME')的工作方式相同


我在使用getenv(“用户名”)时遇到编码问题(使用西里尔文)

如果您要检索远程用户IDSID/USERNAME,请使用:

echo gethostbyaddr($_SERVER['REMOTE_ADDR']);
你会得到这样的结果 iamuser1-mys.corp.company.com

过滤后面域的其余部分,您只能获取idsid


有关更多信息,请访问参考,同时尝试确定授权用户是否属于特定域组;一个聪明的方法是不要创建一个包含文本文件的锁定文件夹(可以为空)。将安全设置为仅具有要验证的安全/发行版组。一旦运行@file\u get\u contents(我们的环境中有多个域,因此我使用preg\u replace with regex只获取用户名,而不获取域\

preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
请尝试以下代码:

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

您可以在php中获取windows(AD)用户名。我尝试了几乎所有这些建议,但它们都返回空值。如果其他人有此问题,我会在php.net()上找到这个方便的函数:


这是我最终能够获取用户active directory用户名的唯一方法。如果上述答案均无效,请尝试一下。

这是一个简单的NTLM AD集成示例,允许使用Internet Explorer单次登录,需要在其他浏览器中登录/配置

PHP示例

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

?>

在apache 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>
LoadModule authnz\u sspi\u module modules/mod\u authnz\u sspi.so
允许超越所有
选项执行CGI
AuthName“SSPI身份验证”
AuthType SSPI
斯皮亚斯酒店
SSPIauthoritive On
sspion域
需要有效用户
要求用户“NT授权\匿名登录”被拒绝
如果您需要该模块,此链接非常有用:

使用以下代码:

shell_exec("wmic computersystem get username")

您不必启用LDAP,因为它是Active Directory的核心组件。只有IE会传递您的凭据,其他浏览器只需提示,在这种情况下,您只需提供域凭据(域\用户名和密码)。Firefox支持(自动)还有集成身份验证。请参见我的应用程序执行合理操作的情况:我是否可以最终信任已通过身份验证的用户?客户端是管理良好的公司内部网的一部分。除了身份验证用户,我需要知道用户是否属于某个组。是否也会传递此信息?最后,您是否有描述您的信息的URLion?感谢您的回答。您必须记住禁用IIS中的匿名访问并启用Windows集成身份验证。使用Intraweb,可以使用WebApplication.Request.GetFieldByName(“AUTH_user”)获取经过身份验证的用户我有Windows集成身份验证,即使使用IE,用户也会被询问。我无法让它与IIS一起工作。我在IIS上运行php,并且只为此网站启用Windows身份验证。我没有此信息。我可以重新检查什么?在IIS->身份验证中打开Windows身份验证并关闭匿名身份验证后,重新检查它为我工作。谢谢,干杯!但是您需要安装一个Apache模块来使用此函数。
apt get install libapache2 authenntlm perl
shell_exec("wmic computersystem get username")