我在Intranet上有一个PHP Web应用程序,可以在该页面上提取当前用户的IP和主机名,但我想知道是否有办法获取/提取他们的Active Directory / Windows用户名。这可能吗?
答案 0 :(得分:44)
检查AUTH_USER
请求变量。如果您的Web应用程序允许匿名访问,这将为空,但如果您的服务器使用基本或Windows集成身份验证,则它将包含经过身份验证的用户的用户名。
在Active Directory域中,如果您的客户端正在运行Internet Explorer并且您的Web服务器/文件系统权限已正确配置,IE将以静默方式将其域凭据提交到您的服务器,AUTH_USER
将为MYDOMAIN\user.name
用户无需明确登录您的网络应用程序。
答案 1 :(得分:16)
我已经在IIS上运行了php mysql - 我可以使用$_SERVER["AUTH_USER"]
如果我在IIS中打开Windows身份验证 - >身份验证和关闭匿名身份验证(重要)
我用它来获取我的用户和域名:
$user = $_SERVER['AUTH_USER'];
$user
会在我们的网络上返回类似DOMAIN\username
的值,然后只是从字符串中删除DOMAIN\
的情况。
到目前为止,这已经在IE,FF,Chrome,Safari(已测试)中有效。
答案 2 :(得分:4)
查看PHP LDAP库函数:http://us.php.net/ldap。
Active Directory [主要]符合LDAP标准。
答案 3 :(得分:3)
如果您在Windows上使用Apache,则可以从
安装mod_auth_sspihttps://sourceforge.net/projects/mod-auth-sspi/
说明在INSTALL文件中,并且有一个whoami.php示例。 (这只是将mod_auth_sspi.so文件复制到文件夹并在httpd.conf中添加一行的情况。)
一旦安装并在httpd.conf中进行必要的设置以保护您希望的目录,PHP将使用IE中经过身份验证的用户的用户和域('USER \ DOMAIN')填充$_SERVER['REMOTE_USER']
- 或者在传入之前在Firefox中进行提示和身份验证。
信息是基于会话的,因此即使在Firefox中也可以进行单点(ish)登录...
-Craig
答案 4 :(得分:2)
您可能authenticate the user in Apache mod_auth_kerb要求对某些文件进行身份验证访问...我想这样,用户名也应该在某些地方的PHP环境变量中可用...可能最好一旦你得到它就检查<?php phpinfo(); ?>
。
答案 5 :(得分: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/
答案 6 :(得分:2)
我们的环境中有多个域名,因此我使用带有正则表达式的preg_replace来获取没有DOMAIN \的用户名。
preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
答案 7 :(得分:1)
没有。但是,您可以做的是让您的Active Directory管理员启用LDAP,以便用户可以维护一组凭据
答案 8 :(得分:1)
您可以说getenv('USERNAME')
答案 9 :(得分:1)
查看Apache的修补NTLM身份验证模块 https://github.com/rsim/mod_ntlm
基于Apache / Unix的NTLM auth模块 http://modntlm.sourceforge.net/
了解详情来源:http://imthi.com/blog/programming/leopard-apache2-ntlm-php-integrated-windows-authentication.php
答案 10 :(得分:0)
get_user_name与getenv('USERNAME');
的工作方式相同我使用getenv('USERNAME')
编码(有西里尔语)问题答案 11 :(得分:0)
引用尝试也确定AUTH_USER是否属于特定域组;一个聪明的方法是创建一个带有文本文件的锁定文件夹(可以是空白)。将安全性设置为仅具有要验证的安全/发行组。一旦你运行@file_get_contents(&lt; ---将抛出警告)...如果用户没有组访问权限,他们将无法获取文件内容,因此,将无法访问该特定的AD组。这很简单,效果非常好。
答案 12 :(得分: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>
如果您需要该模块,此链接非常有用:
答案 13 :(得分:0)
使用此代码:
shell_exec("wmic computersystem get username")
答案 14 :(得分:-2)
试试这段代码:
class PhotoDetail(DetailView):
def get_queryset(self):
queryset = super(PhotoDetail, self).get_queryset()
return queryset.filter(photoextended__user=self.request.user)
你在php中获得了你的windows(AD)用户名
答案 15 :(得分:-2)
我尝试了几乎所有这些建议,但它们都返回了空值。如果其他人有这个问题,我在php.net(http://php.net/manual/en/function.get-current-user.php)上找到了这个方便的功能:
get_current_user();
$username = get_current_user();
echo $username;
这是我终于能够获得用户的活动目录用户名的唯一方法。如果上述答案都没有奏效,请尝试一下。