基於CAS的單點登錄實戰(2)-- 搭建cas的php客戶端


在這之前已經搭好了CAS服務端 基於CAS的單點登錄實戰(1)-- 搭建cas服務器

PHP-Client#

php-Client是官方支持的,去官網下個最新版就好了。phpCAS
接入很簡單,解壓放到web目錄下:
+. docs/examples/目錄下都是示例文件,這里取example_simple.php為例。
+. source/cas.php 核心文件
注:可能因為版本的不同目錄結構會不一樣。
下面是代碼示例

<?php

//
// phpCAS simple client
//

// import phpCAS lib
// 引入文件
include_once('CAS.php');
//  開啟log,注意目錄讀寫權限 
phpCAS::setDebug('tmp/cas.log');

// initialize phpCAS
// 四個參數分別是
// cas server 版本
// cas server 域名
// cas server 端口
// cas server 路徑
phpCAS::client(CAS_VERSION_2_0, 'localhost', 8088, '/cas-server');

// 不驗證SSL證書
phpCAS::setNoCasServerValidation();

// force CAS authentication
// 這個是強制認證模式,查看 client.php 可以找到集中不同的方式
// forceAuthentication
// checkAuthentication
// renewAuthentication
// 根據自己需要調用即可
phpCAS::forceAuthentication();
  
// 處理登出請求。cas服務端會發送請求通知客戶端。如果沒有同步登出,可能是服務端跟客戶端無法通信(比如我的客戶端是localhost, 服務端在雲上)
phpCAS::handleLogoutRequests();

// at this step, the user has been authenticated by the CAS server
// and the user's login name can be read with phpCAS::getUser().
// 獲取用戶名
$username = phpCAS::getUser();
// 獲取完整用戶信息(在上一篇文章中介紹了如何擴展用戶信息)
$userinfo = phpCAS::getAttributes();

// logout if desired
if (isset($_REQUEST['logout'])) {
    // 這里貌似可以指定退出后返回的頁面,但是我沒有成功
    // phpCAS::logout(['service'=>'http://localhost/cas-client/index.php']);
    phpCAS::logout();
}

部署之后可以成功獲取用戶信息,同步登錄登出。然而有個嚴重BUG,退出登錄之后需要登錄2次才能成功。。。目前還未解決
client.php 里封裝了很多有用的方法,可以根據業務場景調用。
假如接入其他系統需要了解原系統的認證方式,然后視情況進行修改甚至重做。
遇到的問題:

  1. 設置phpCAS::handleLogoutRequests();后不能同步退出,是因為cas服務端無法連接測試環境的域名
  2. phpCAS::logout(['service'=>'http://localhost/cas-client/index.php']); 設置退出登錄后返回的頁面,但是我這里沒成功過
  3. php客戶端退出后需要登錄2次(提交空表單或者Ctrl+F5刷新也可)才能登錄。起初懷疑是緩存,然后在java服務端設置http頭no-cache,結果我的2個php客戶端其一可以正常登錄了,另一個還是需要登錄兩次。。崩潰中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM