PHP 集成 AD 域认证

来源:互联网 发布:怎么取消淘宝网店 编辑:程序博客网 时间:2024/05/11 13:08

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 .


原创粉丝点击