我在内部网上有一个PHP web应用程序,可以在该页面上提取当前用户的IP和主机名,但我想知道是否有办法获取/解压缩他们的Active Directory/Windows用户名。这可能吗?你能在PHP中获得Windows(AD)用户名吗?
回答
的检查AUTH_USER
请求变量。如果您的网络应用程序允许匿名访问,这将为空,但如果您的服务器使用基本或Windows集成身份验证,它将包含经过身份验证的用户的用户名。
在Active Directory域,如果您的客户端运行的Internet Explorer和您的Web服务器/文件系统权限的配置正确,IE会悄悄地提交自己的域凭据到您的服务器,并没有用户不必明确记录AUTH_USER
将MYDOMAIN\user.name
进入您的网络应用程序。
不可以,但你可以做的是有你的活动目录管理员启用LDAP,以便用户能够保持一组凭据
你不”必须启用LDAP,因为它是Active Directory的核心组件。 – VVS 2008-10-03 20:00:57
看看PHP的LDAP库函数:http://us.php.net/ldap。
Active Directory [主要]符合LDAP标准。
有一些额外的PEAR库,可能使事情变得更加容易:
你可以通过要求认证访问某些文件可能authenticate theuser in Apache与mod_auth_kerb ......我想这样一来,用户名也应在PHP环境变量中可用...可能最好与<?php phpinfo(); ?>
检查,一旦你得到它runnning。
如果你使用Apache在Windows上,你可以从
http://www.gknw.at/development/apache/httpd-2.2/win32/modules/mod_auth_sspi-1.0.4-2.2.2.zip
说明安装mod_auth_sspi在INSTALL文件,并有一个whoami.php例子。 (这只是将mod_auth_sspi.so文件复制到一个文件夹并在httpd.conf中添加一行的情况。)
一旦安装了它并在httpd.conf中进行了必要的设置以保护您希望的目录,PHP将在IE中使用用户和域名('USER \ DOMAIN')认证用户填充$_SERVER['REMOTE_USER']
- 或者在Firefox中通过提示和身份验证。
信息是基于会话的,所以单个(ish)即使在Firefox中也可以登录...
-Craig
你可以说getenv('USERNAME')
我有PHP的MySQL运行在IIS上 - 我可以使用$_SERVER["AUTH_USER"]
如果我打开Windows身份验证在IIS中 - >认证,并关闭匿名身份验证(重要)
我用这个,让我的用户和域:
$user = $_SERVER['AUTH_USER'];
$user
将在我们的网络上返回如下值:DOMAIN\username
,然后它只是从字符串中删除DOMAIN\
的一种情况。
到目前为止,这已经在IE,FF,Chrome,Safari(已测试)中有效。 http://imthi.com/blog/programming/leopard-apache2-ntlm-php-integrated-windows-authentication.php
来源为Apache https://github.com/rsim/mod_ntlm
退房修补的NTLM身份验证模块基于对Apache/Unix的 http://modntlm.sourceforge.net/
阅读NTLM身份验证模块与getenv('USERNAME')相同的方式;
我不得不使用GETENV( 'USERNAME')
get_user_name作品:
编码(西里尔字母)的问题。如果您正在寻找检索远程用户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/
引用努力也找出如果AUTH_USER是一个特定的域组的一部分;一个聪明的方法是创建一个带有文本文件的锁定文件夹(可以是空白的)。将安全设置为仅允许您要验证的安全/发行组。一旦你运行@file_get_contents(< ---会抛出一个警告)......如果用户没有组访问权限,他们将无法获取文件内容,因此将不具有该特定的AD组访问权限。这很简单,奇妙地工作。
我们在我们的环境中有多个域,所以我使用preg_replace和正则表达式来获取没有DOMAIN \的用户名。
preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
试试这个代码:
$user= shell_exec("echo %username%");
echo "user : $user";
你在PHP
我试过几乎所有这些建议,您的窗口(AD)的用户名,但他们都返回空值。如果任何人有这个问题,我发现php.net(http://php.net/manual/en/function.get-current-user.php)这个方便的功能:
get_current_user();
$username = get_current_user();
echo $username;
这是我终于能够得到用户的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>
如果你需要的模块,这个环节是非常有用的:
- 1. 你能从PHP中的方法中获得方法名吗?
- 2. 你能在Rails中获得DB用户名,密码,数据库名称吗?
- 3. 你可以在vbs中获得pc用户名吗?
- 4. 你能从boto获得aws帐户名吗?
- 5. 你能在PHP中获得这个相同的Java SHA-1吗?
- 6. 你能用javascript获得用户屏幕尺寸/分辨率吗?
- 7. 如何获得AD组的用户在指定的用户名和域名
- 8. Azure AD和Windows 10以及用户名
- 9. 你能从SubReport获得价值吗?
- 10. 获得认证的Windows用户名
- 11. 你能至少获得https referer的域名吗?
- 12. 你能从mvc-mini-profiler获得EF方法名吗?
- 13. 如何获得用户的用户名在Windows网络
- 14. 我怎样才能在Windows 7中使用WPF获得完整的用户名?
- 15. 在Windows上,你可以像使用PHP的文件路径一样使用UNC,以获得file_get_contents()等功能吗?
- 16. 在PHP中检测windows域用户名
- 17. 在Spring MVC中获取Windows用户名
- 18. 在Jquery/Razor中获取用户的AD名称
- 19. 在c#中获取访问者AD用户名#
- 20. socket.io:你能从该事件中获得动态事件的名称吗?
- 21. AD在Windows Server 2012 + Windows LDAP + PHP绑定
- 22. 如何在php中获得会话标识或用户名? 。
- 23. 你还在Windows 8中使用DXSDK_DIR吗?
- 24. 你可以使用PySphere获得客户操作系统吗?
- 25. 使用php获取当前用户的Windows用户名?
- 26. 我怎样才能在Django中获得'用户名'的会话
- 27. 你能用VB.NET从Exchange获得笔记和任务吗?
- 28. 你能从C++溢出中获得“nan”吗?
- 29. 你能获得更多关于在线文件的信息吗?
- 30. AD从用户名登录用户IP
这是一个遗憾,这只适用于IE – Simurr 2008-10-10 17:51:19
只有IE通过您的凭证,其他浏览器只是提示,在这种情况下,您只需提供您的域凭据(域\用户名和密码)。 – CodeMonkey1313 2009-08-25 15:15:50
Firefox也支持(自动)集成身份验证。请参阅https://developer.mozilla.org/en/Integrated_Authentication – VolkerK 2010-03-20 23:21:50