PHP 集成 AD 域认证
Apache Server 本身没有集成 Windows AD 的 Module,必须要载入协力厂商的 Module 才可以实现此功能,这个协力厂商的 Module 名称是 mod_auth_ssip.so 可以从着名的开源软体网站 sourceforge.net 上取得,最新版本是 1.0.4。安装及配置的步骤如下:
1)从 http://sourceforge.net/projects/mod-auth-sspi 下载解压
2) Copy mod_auth_ssip.so 到 $APACHE_HOME/modules/ ( $APACHE_HOME 是 apache 安装的根目录)
3)打开 $APACHE_HOME/conf/httpd.conf, 在大约 Line 69
LoadModule asis_module modules/mod_asis.so
的下面加上如下代码
LoadModule sspi_auth_module modules/mod_auth_sspi.so
4) Restart Apache Server.
Client Side Configure
在需要验证的目录下新建一个 .htaccess 的 file. File 内容如下:
AuthName "eHR System"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
require valid-user
ErrorDocument 401 "<script>alert('Your Account or Password is Error. \r\nClick [OK] button System will redirect to eHR login screen automaticlly.');</script> <meta http-equiv='refresh' content='0;url= ../ess/'/>"
这是要调用 mod_auth_ssip.so 必须的几项设定,更多的选项请参考上面解压目录裡的 /doc INSTALL.
这个档裡的内容也可以放在上面的 httpd.conf 档中,根据你个人的喜好,如果不想改 Server 的配置,或是你没有许可权更新 Server 的 Config 档的时候可以採用上面的方式。
PHP 代码
// index.php<?php
if (isset ( $_SERVER ['REMOTE_USER'] ) && ! empty ( $_SERVER ['REMOTE_USER'] )) {
session_start ();
header ( 'Location: ../ess/includes/login.php?remote_user=' . urlencode ( $_SERVER ['REMOTE_USER'] ) . '&sessid=' . session_id () );
exit ();
} else {
header ( 'Location: ../ess/' );
exit ();
} // end if
?>
注意事项:
1.使用 .htaccess 方式时,PHP的 curl 模组一定要打开,在 php.ini 中寻找
;extension=php_curl.dll
把前面的分号去掉。
2.选择合适的 apache 和 mod_auth_sspi.so 版本。
已知的 Issue mod_auth_sspi.so 1.0.4 + Apache2.x 时,在Server 是 windows XP 或 Windows Server 2003 平台,IE 下面会无法提交 Post 变数。也就是说通过 mod_auth_sspi 来认证后的其它页无法进行POST,在 PHP 程式裡无法得到 POST 的变数,所以在使用之前请改在 Get 方式。
3.访问请用主机名称称或是功能变数名称,不要用 IP 来访问,否则系统每次都 Popup 出输入 AD 帐号和密码的 Dialog Window.
4.打开IE 的Automatic logon with current user and password,Internet Options->Security->Customer Level->User Authentication如下图:

勾选后就第一次会提示输入 AD Account 和 Password,像 SSO 一样,之后就会自动 Login .
1511

被折叠的 条评论
为什么被折叠?



