2008-10-03 61 views

回答

38

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

在Active Directory域,如果您的客户端运行的Internet Explorer和您的Web服务器/文件系统权限的配置正确,IE会悄悄地提交自己的域凭据到您的服务器,并没有用户不必明确记录AUTH_USERMYDOMAIN\user.name进入您的网络应用程序。

+2

这是一个遗憾,这只适用于IE – Simurr 2008-10-10 17:51:19

+1

只有IE通过您的凭证,其他浏览器只是提示,在这种情况下,您只需提供您的域凭据(域\用户名和密码)。 – CodeMonkey1313 2009-08-25 15:15:50

+6

Firefox也支持(自动)集成身份验证。请参阅https://developer.mozilla.org/en/Integrated_Authentication – VolkerK 2010-03-20 23:21:50

1

不可以,但你可以做的是有你的活动目录管理员启用LDAP,以便用户能够保持一组凭据

http://us2.php.net/ldap

+2

你不”必须启用LDAP,因为它是Active Directory的核心组件。 – VVS 2008-10-03 20:00:57

2

你可以通过要求认证访问某些文件可能authenticate theuser in Apachemod_auth_kerb ......我想这样一来,用户名也应在PHP环境变量中可用...可能最好与<?php phpinfo(); ?>检查,一旦你得到它runnning。

3

如果你使用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

0

你可以说getenv('USERNAME')

6

我有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

0

get_user_name作品:

1

编码(西里尔字母)的问题。如果您正在寻找检索远程用户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/

0

引用努力也找出如果AUTH_USER是一个特定的域组的一部分;一个聪明的方法是创建一个带有文本文件的锁定文件夹(可以是空白的)。将安全设置为仅允许您要验证的安全/发行组。一旦你运行@file_get_contents(< ---会抛出一个警告)......如果用户没有组访问权限,他们将无法获取文件内容,因此将不具有该特定的AD组访问权限。这很简单,奇妙地工作。

0

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

preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]); 
-2

试试这个代码:

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

你在PHP

-1

我试过几乎所有这些建议,您的窗口(AD)的用户名,但他们都返回空值。如果任何人有这个问题,我发现php.net(http://php.net/manual/en/function.get-current-user.php)这个方便的功能:

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

这是我终于能够得到用户的Active Directory用户名的唯一方法。如果以上答案都不起作用,请尝试一下。

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/

相关问题