49

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

4

16 回答 16

49

检查AUTH_USER请求变量。如果您的 Web 应用程序允许匿名访问,这将为空,但如果您的服务器使用基本或 Windows 集成身份验证,它将包含经过身份验证的用户的用户名。

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

于 2008-10-03T19:57:20.110 回答
17

我在 IIS 上运行了 php mysql -$_SERVER["AUTH_USER"] 如果我在 IIS 中打开 Windows 身份验证 -> 身份验证并关闭匿名身份验证,我可以使用(重要)

我用它来获取我的用户和域:

$user = $_SERVER['AUTH_USER'];

$user将返回一个值,如:DOMAIN\username在我们的网络上,然后只是DOMAIN\从字符串中删除的情况。

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

于 2010-07-29T06:51:04.607 回答
4

查看 PHP LDAP 库函数:http ://us.php.net/ldap 。

Active Directory [大部分] 符合 LDAP 标准。

于 2008-10-03T19:57:39.893 回答
4

我们的环境中有多个域,所以我使用 preg_replace 和正则表达式来获取没有 DOMAIN\ 的用户名。

preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
于 2017-01-28T22:06:29.500 回答
3

如果您在 Windows 上使用 Apache,则可以从以下位置安装 mod_auth_sspi

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

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

一旦安装并在 httpd.conf 中进行必要的设置以保护您希望的目录,PHP 将$_SERVER['REMOTE_USER']在 IE 中使用经过身份验证的用户的用户和域 ('USER\DOMAIN') 填充 - 或在 Firefox 中提示并进行身份验证在传递它之前。

信息是基于会话的,因此即使在 Firefox 中也可以进行单(ish)登录......

-克雷格

于 2009-12-24T12:02:58.947 回答
2

您可能可以通过要求对某些文件进行身份验证的访问来使用mod_auth_kerb在 Apache 中对用户进行 身份验证……我认为这样,用户名也应该在 PHP 环境变量中的某个地方可用……可能最好在运行后进行检查。<?php phpinfo(); ?>

于 2008-10-03T20:13:08.440 回答
2

如果您正在寻找检索远程用户 IDSID/用户名,请使用:

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

你会得到类似 iamuser1-mys.corp.company.com 的东西

过滤后面的其余域,您只能获得 idsid。

欲了解更多信息,请访问http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/

于 2012-12-21T08:29:50.833 回答
2

使用此代码:

shell_exec("wmic computersystem get username")
于 2019-07-23T21:44:12.893 回答
1

你可以说getenv('USERNAME')

于 2010-05-28T21:58:43.830 回答
1

查看 Apache https://github.com/rsim/mod_ntlm的修补 NTLM 身份验证模块

基于 Apache/Unix 的 NTLM 身份验证模块 http://modntlm.sourceforge.net/

在http://blog.rayapps.com/阅读更多信息

来源:http: //imthi.com/blog/programming/leopard-apache2-ntlm-php-integrated-windows-authentication.php

于 2011-10-26T06:49:35.587 回答
0

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

http://us2.php.net/ldap

于 2008-10-03T19:56:55.230 回答
0

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

我在使用 getenv('USERNAME') 时遇到了编码(西里尔文)问题

于 2012-04-24T07:58:04.473 回答
0

引用还试图弄清楚 AUTH_USER 是否是特定域组的一部分;一个聪明的方法是不要创建一个带有文本文件的锁定文件夹(可以是空白的)。将安全设置为仅具有您要验证的安全/发行版组。一旦你运行 @file_get_contents (<---会抛出一个警告)......如果用户没有组访问权限,他们将无法获取文件内容,因此将没有特定的 AD 组访问权限。这很简单,而且效果很好。

于 2015-12-16T12:52:03.637 回答
0

这是一个简单的 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>

如果您需要该模块,此链接很有用:

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

于 2017-07-28T11:50:32.153 回答
-2

试试这个代码:

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

你在 php 中得到你的 windows(AD) 用户名

于 2017-03-07T16:21:20.177 回答
-3

我尝试了几乎所有这些建议,但它们都返回空值。如果其他人有这个问题,我在 php.net ( http://php.net/manual/en/function.get-current-user.php ) 上找到了这个方便的功能:

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

这是我最终能够获得用户的活动目录用户名的唯一方法。如果以上答案均无效,请尝试一下。

于 2017-03-15T20:14:41.650 回答