论坛首页 编程语言技术论坛

phpBB开源论坛单点登录整合

浏览 17978 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-26  
PHP
以下文档以实际项目中的整合为例,抽取了phpBB论坛部分代码,转载请注明出处,欢迎转载!

环境(以下环境测试通过):

Operation System Windows XP
JVM SUN JDK 1.5
PHP PHP 5.2.6
Http Server Apache 2.2.6
Web Server Tomcat 5.5
CAS Server JA-SIG CAS Server 3.2.1
CAS PHP Client PHP CAS Client 1.0.0RC5
Database mysql-5.0.26-win32

Apache 2.2.6 + PHP 5.2.6为PHP的WEB服务器!
Tomcat 5.5 为CAS Server的WEB服务器!

注意: 本次整合只PHPBB前台用户能使用SSO功能,管理员用户使用不了SSO,代码中$admin 变量代表是否管理员用户!

4. CAS PHP Client集成
4.1. 下载CAS PHP Client
总入口:http://www.ja-sig.org/wiki/display/CASC/phpCAS
源码入口页:http://www.ja-sig.org/wiki/display/CASC/Developing+phpCAS+within+Eclipse

源码访问:
SVN URL: https://www.ja-sig.org/svn/cas-clients/phpcas
Web interface: http://developer.ja-sig.org/source/browse/jasigsvn/cas-clients/phpcas

总入口页还有实例可供下载。

4.2. 更改phpBB论坛登录模块
以下可以参见:svn://192.168.16.225/phpBB/trunk/phpBB-3.0.1
1. 把CAS PHP Client的源码copy到${phpBB}/includes下,如下图结构;

图中选中的文件及目录为CAS PHP Client的全部源码。
2. 更改CAS PHP Clinet对https的限制;
Down下来的PHP Client必须要使用https连接与CAS Server通信,在实际项目中,为减少部署的麻烦,可能只要http连接就能满足要求,在文件clinet.php中,把$this->_server['base_url'] = 'https://'更改为$this->_server['base_url'] = 'http://'即可,如图所示。

3. 更改phpBB登录模块
在function.php文件中
加入CAS类引用语句:
require($phpbb_root_path . 'includes/CAS.' . $phpEx);


找到:
if (isset($_POST['login']))
替换成:
if(!$admin && CAS_ENABLE){
// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME);
phpCAS::setNoCasServerValidation();
// force CAS authentication
phpCAS::forceAuthentication();
}
if (isset($_POST['login']) || (!$admin && CAS_ENABLE) )


找到:
$result = $auth->login($username, $password, $autologin, $viewonline, $admin);
在上面代码片段前加上:
if(!$admin && CAS_ENABLE){
$username = phpCAS::getUser();
$password = '';
}

在auth.php文件中
加入以下代码
/**
*根据当前已登录CAS的用户名获取用户身份信息,封装用户身份信息
* added by Royce
*/
function login_cas($username){
global $db;

$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts FROM ' . USERS_TABLE
. " WHERE username_clean = '" . $username . "'";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

if (!$row) {
return array(
'status' => LOGIN_ERROR_USERNAME,
'error_msg' => 'LOGIN_ERROR_USERNAME',
'user_row' => array('user_id' => ANONYMOUS),
);
}

if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE) {
return array(
'status' => LOGIN_ERROR_ACTIVE,
'error_msg' => 'ACTIVE_ERROR',
'user_row' => $row,
);
}

// Successful login... set user_login_attempts to zero...
return array(
'status' => LOGIN_SUCCESS,
'error_msg' => false,
'user_row' => $row,
);
}

找到:
$login = $method($username, $password);
替换为:
if(!$admin && CAS_ENABLE) 
$login = $this->login_cas($username); 
else 
$login = $method($username, $password);


在constants.php文件中
增加:
//是否启用CAS
define('CAS_ENABLE', true);
//CAS Server 主机名
define('CAS_SERVER_HOSTNAME', 'localhost');
//CAS Server 端口号
define('CAS_SERVER_PORT', 8080);
//CAS Server应用名
define('CAS_SERVER_APP_NAME', 'cas');

  • 大小: 18.7 KB
  • 大小: 15.1 KB
   发表时间:2008-10-20  
请问下数据库方面怎么设置的?项目的user表是否要和phpbb的user表同步?
0 请登录后投票
   发表时间:2008-11-08  
liuzhao 写道

请问下数据库方面怎么设置的?项目的user表是否要和phpbb的user表同步?

不好意思,没注意看你的评论了,项目的user表是否要和phpbb的user表是需要同步的,总之要维护帐户的统一性.
0 请登录后投票
   发表时间:2008-11-08  
项目的user表和phpbb的user表是需要同步的
0 请登录后投票
   发表时间:2008-11-23  
cas server 端怎么配阿   谢谢
0 请登录后投票
   发表时间:2008-11-23  
bjlfp 写道

cas server 端怎么配阿   谢谢

服务端主要配数据库连接,及TGT cookie是否使用https,如果是数据库连接可以参见我写的文章——http://iroyce.iteye.com/blog/101915

TGT cookie参见p:cookieSecure="false"

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
		p:cookieSecure="false"
		p:cookieMaxAge="-1"
		p:cookieName="CASTGC"
		p:cookiePath="/cas" />
</beans>
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics