30

我隐约知道,在加入域的计算机上,可以要求 IE 发送一些额外的标头,我可以使用这些标头自动登录到应用程序。我在带有 mod_php 的 Windows 服务器上运行了 apache。我希望能够避免用户在必要时登录。我发现了一些关于 Kerberos 和 Apache 模块的链接。

http://www.onlamp.com/pub/a/onlamp/2003/09/11/kerberos.html?page=last https://metacpan.org/pod/Apache2::AuthenNTLM

由于我在 Windows 上运行,因此安装 Perl 或 Apache 模块已被证明并非易事。但是 PHP 不是已经可以访问 HTTP 标头了吗?

我发现了这个,但它没有做任何身份验证,它只是表明 PHP 可以读取 NTLM 标头。 http://siphon9.net/loune/2007/10/simple-lightweight-ntlm-in-php/

我希望能够让我的用户只指向应用程序并让他们自动进行身份验证。有没有人有这方面的经验或让它工作?

更新 自从最初发布这个问题以来,我们已经将设置更改为 nginx 和 php-fcgi 仍然在 Windows 上运行。windows 上的 Apache2 和 php-cgi 可能是您可以在 windows 上配置的最慢的设置之一。看起来可能仍然需要 Apache(它适用于 php-fcgi),但我更喜欢 nginx 解决方案。

我也仍然不明白(并且很想接受教育)为什么 HTTP 服务器插件是必要的,我们不能有一个 PHP、Web 服务器不可知的解决方案。

4

5 回答 5

18

您所需要的只是mod_auth_sspiApache 模块。

示例配置:

AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain mydomain

# Set this if you want to allow access with clients that do not support NTLM, or via proxy from outside. Don't forget to require SSL in this case!
SSPIOfferBasic On

# Set this if you have only one domain and don't want the MYDOMAIN\ prefix on each user name
SSPIOmitDomain On

# AD user names are case-insensitive, so use this for normalization if your application's user names are case-sensitive
SSPIUsernameCase Lower
AuthName "Some text to prompt for domain credentials"
Require valid-user

并且不要忘记,您也可以在 Windows 域中使用 Firefox 进行透明 SSO:只需转到about:config,搜索network.automatic-ntlm-auth.trusted-uris,然后输入您的内部应用程序的主机名或 FQDN(如 myserver 或 myserver.corp.domain.com)。您可以有多个条目,它是一个逗号分隔的列表。

于 2009-10-15T03:32:22.447 回答
1

我有一个类似的问题需要为我的组织解决。

我正在研究使用adLDAP

该站点上也有一些文档用于实现与 Active Directory 的无缝身份验证。

于 2009-10-12T04:09:01.153 回答
1

我会对使用 OpenID 作为后端(某种)的解决方案感到好奇......当我搜索(快速)时,我没有看到任何可以直接连接到 ActiveDirectory 的东西。但是,通过普通的 HTTP(S) 实现可能非常轻松(您将成为根据本地 AD 检查凭据的 OpenID 提供者)。在最好的情况下,您可能只需向您的应用程序添加几个类并关闭并运行——不需要 Web 服务器模块。这方面的任何一方都有很多开源代码,所以如果没有别的,值得一看。如果您将后端暴露给用户(即给他们 OpenID URL),您将获得额外的好处,即他们不仅可以使用这些凭据登录到您的内部站点。(例如:堆栈溢出。)

顺便说一句,我反对这样做,以便需要 Internet Explorer。我不确定这是否是您编写问题的方式的目标,但根据您的 IT 环境,我希望使用 Firefox 或 Safari(或 Opera 或 ...)的人不太热情。(你不是先用IE开发吧. 您发布的链接表明 NTLM 不仅适用于 IE,但由于我没有任何经验,因此很难判断它的效果如何。

于 2009-10-15T02:51:51.327 回答
0

您的一种选择是使用 CAS(中央身份验证服务)。

它有 php 客户端库。

如何链接到 MS Active Directory:http ://www.ja-sig.org/wiki/display/CASUM/Active+Directory

不过,您将需要 Apache maven 2。

于 2009-10-15T02:14:11.450 回答
0

对于 IIS/PHP FCGI,您需要发送未经授权的标头:

function EnableAuthentication()
{
    $realm = "yoursite";
    header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
    header("HTTP/1.1 401 Unauthorized"); 
    exit;
}

然后,您可以通过以下方式获取用户名:

$winuser = $_SERVER["REMOTE_USER"];

然后我确保 $winuser 在我的允许用户数据库中。

请务必在非特权帐户下进行测试。当我第一次安装它时,我对其进行了测试,它运行良好,但后来当一个标准的非服务器管理员用户尝试它时,它失败了。事实证明,一些临时目录需要更改来宾用户的权限。我不记得确切的设置。

于 2009-10-16T19:05:59.003 回答