用CAS實現discuz7單點登錄

用CAS實現discuz7單點登錄
最近一個項目,用兩種語言完成,會員部分和相冊是jsp,其他的部分是discuz7+ucenter1.5+uchome2+ecmall2,php的。不同系統不同語言,同步登錄問題就擺在眼前了。要求用jsp部分的會員信息作爲登錄信息。實現方案是採用CAS。php部分的幾個系統有ucenter來實現登錄整合,當前的問題是PHP與jsp之間的登錄整合。服務器端CAS安裝網上很多介紹,CAS的PHP端用PHPCAS。下面介紹discuz的代碼改造

其實也很簡單。找到discuz的logging.php 這個是登陸入口,在第二行插入
define('CAS_ENABLE', true);
define('CAS_SERVER_HOSTNAME', "CAS服務器地址");
define('CAS_SERVER_PORT', 80);
define('CAS_SERVER_APP_NAME', "CAS驗證入口");
require_once("CAS.php");
phpCAS::client(CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME);
phpCAS::setNoCasServerValidation();
phpCAS::forceAuthentication();

if($action<>'logout'){
unset($_COOKIE);
$action='login';
$username = phpCAS::getUser();
$password = '';
$loginsubmit='yes';
$cookietime="2592000";
$allowsynlogin = 1;
}

找到這行showmessage('logout_succeed', dreferer()); 在它上面加入
phpCAS::logout();

之後找到uc_client /control目錄下的user.php 註釋掉第123行開始的

elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
    $status = -2;
   } elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
    $status = -3;
   }

找到uc_client /model目錄下的user.php ,註釋掉第100行開始的

elseif($user['password'] != md5(md5($password).$user['salt'])) {
    return -2;}

代碼改造結束,這樣discuz利用CAS登錄後返回的用戶名進行登錄。沒有用密碼做ucenter同步登陸,可能不太安全,其實也可以從CAS取得用戶名的同時再申請取得密碼給$password,這樣的話就不需要修改uc_client 目錄下的兩個user.php文件了。推薦還是從CAS同時取得密碼,這樣安全些。

至此discuz不但能通過CAS實現與其他系統的同步登陸,同時能夠實現同過ucenter同步登陸康盛系列產品。(本文僅供學習參考,本人不對修改源程序產生的一切問題負責)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章