2009-06-16 52 views
23

我隐约地意识到,在加入域的计算机上,可能会要求发送一些额外的头文件,以便我可以使用它们自动登录到应用程序。我已经用mod_php在windows服务器上运行apache。我希望能够避免用户必要时必须登录。我发现了一些关于Kerberos和Apache模块的链接。如何使用Microsoft AD实现内部PHP应用程序的单点登录(SSO)?

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/

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

UPDATE 由于最初发布这个问题,我们已经改变了设置让nginx和php-fcgi的仍然运行在Windows。 Windows上的Apache2和php-cgi可能是您可以在Windows上配置的最慢安装程序之一。它看起来像Apache可能仍然是需要的(它与php-fcgi一起使用),但我更喜欢nginx解决方案。

我还不明白为什么HTTP服务器插件是必需的,我们不能拥有一个PHP,Web服务器不可知的解决方案。

+0

这是一个内部防火墙应用程序吗? – 2009-09-20 00:45:07

+0

是的,它是内部的 – reconbot 2009-10-12 03:39:15

+1

有什么我可以添加来改善这个问题? – reconbot 2009-10-13 19:00:03

回答

16

所有你需要的是Apache模块mod_auth_sspi

示例配置:

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 

而且不要忘了,你也可以use Firefox for transparent SSO in a Windows domain:只要到about:config,搜索network.automatic-ntlm-auth.trusted-uris,并输入主机名或FQDN您的内部应用程序(如MYSERVER或MYSERVER .corp.domain.com)。你可以有多个条目,它是一个逗号分隔的列表。

1

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

我正在研究使用adLDAP

网站上还有一些关于使用Active Directory实现无缝验证的文档。

+0

该文档的链接是http://adldap.sourceforge.net/wiki/doku.php?id=seamless_authentication我会看看 – reconbot 2009-10-12 13:25:31

+1

有一些关于重定向到iis服务器进行身份验证的很好的信息令牌,但它主要是推动Linux上的Apache模块。 – reconbot 2009-10-12 13:56:25

1

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

顺便说一句,我会反对让Internet Explorer成为必需。我不确定这是否是您编写问题的目标,但取决于您的IT环境,我期望使用Firefox或Safari(或Opera或...的人们......)不够热情。 (你不是首先针对IE开发的,是吗?每当我这样做的时候都很痛苦。)这并不是说你不能使用IE的这个特性,只是它不应该是唯一的选择。您发布的链接指出,NTLM的工作量超过了IE,但由于我对此没有任何经验,所以很难判断它的效果如何。

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是在我的允许用户数据库中。

请确认并在非特权帐户下进行测试。当我第一次安装它时,我测试了它,它工作正常,但后来当一个标准的非服务器管理员用户试用它时,失败了。发现一些临时目录需要为访客用户更改权限。我无法回想确切的设置。

相关问题