AUTH_USER 对比 LOGON_USER 对比 REMOTE_USER

AUTH_USER vs LOGON_USER vs REMOTE_USER

我希望能够在登录用户访问我们的网站时获取他们的信息,这样他们就不需要登录了。 有人告诉我,只有当您使用 windows IE 时,才可能在 IE 中使用。一旦他们使用 windows 凭据登录。

我在网上搜索了一下,所有这三个($_SERVER['AUTH_USER']$_SERVER['LOGON_USER']$_SERVER['REMOTE_USER'])都被推荐了,所以我不确定该检查哪一个。

其次,我正在使用带 IIS 的 windows 服务器,无论我在网上尝试过和搜索过什么,都无济于事。 我可以在 $_SERVER 中看到变量,但以上都是空字符串。

我该如何解决这个问题?

作为参考,我使用 windows 服务器 2012 和 php v7.1

同样在我的 php.ini 文件中,我看到它们都具有以下值。

$_SERVER['LOGON_USER']: no value(像这样)

但我也搜索过如何在 .ini 文件中设置这些设置,但运气不佳。

header('WWW-Authenticate: NTLM', true);


// with this die there is a user and password prompt 
// if i click cancel then it sends the information through to the 
// server vars as expected.     
// when we cancel here it registers as two requests as my logs in the 
// log shows up two times.

// without it the login page loads with symfony but no values ever
// come through and i cant log in the user. 
die();

为此,系统应位于 Intranet 网络上!

您可以使用以下代码轻松获取系统用户名:

<?php echo getenv("username"); ?>

为了获取登录用户,首先确保您启用了 windows 身份验证并禁用了匿名。您必须先发送 NTLM-Authenticate headers。之后, $_SERVER-Vars

中应该有正确的用户
header('WWW-Authenticate: NTLM');
$_SERVER['AUTH_USER'];

这仅适用于 I.E,您还需要将 I.E 配置为自动登录

将 Internet Explorer 配置为自动登录

  • 通过选择“Internet 选项”打开“Internet 选项”对话框 从控制面板或从 Internet 中的工具菜单 探索者.

  • 在“Internet 选项”对话框的“安全”选项卡上,select本地 Intranet,然后单击自定义级别。

  • 在“安全设置”对话框的“登录”下,select“自动” 仅在Intranet 区域登录,然后单击确定。

  • 在“Internet 选项”对话框的“安全设置”选项卡上使用 本地 Intranet 仍在 selected,单击站点。

  • 在“本地 Intranet”对话框中,单击“高级”。

  • 在下一个对话框(也称为本地 Intranet)中,键入 URL 您的 Communicator Web Access 网站(例如, https://cwaserver.contoso.com) 在将此网站添加到区域中 框,然后单击添加。

  • 在“本地 Intranet”对话框中,单击“确定”框。

  • 在原来的本地Intranet对话框中,点击确定。

  • 在“Internet 选项”对话框中,单击“确定”。

AUTH_USER

用户名源自客户端发送的授权 header,在用户名映射到 Windows 帐户之前。这个变量和REMOTE_USER没什么区别。

LOGON_USER

唯一一次 LOGON_USER 持有与这些其他变量不同的值是在您安装了身份验证过滤器的情况下。

https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx