cas php实现
CAS (Central Authentication Service) PHP 实现
CAS (Central Authentication Service) 是一种单点登录协议,允许用户通过一次登录访问多个应用程序。以下是使用 PHP 实现 CAS 客户端的基本方法。
安装 CAS 客户端库
推荐使用 jasig/phpcas 库,这是一个广泛使用的 PHP CAS 客户端库。可以通过 Composer 安装:
composer require jasig/phpcas
基本配置
在 PHP 项目中引入 CAS 客户端库并进行基本配置:
require_once 'vendor/autoload.php';
// 引入 CAS 客户端
use phpCAS;
// 初始化 CAS 客户端
phpCAS::client(CAS_VERSION_2_0, 'cas.example.com', 443, '/cas');
// 设置 CAS 服务器证书(可选,用于 HTTPS 验证)
phpCAS::setCasServerCACert('/path/to/cas_cert.pem');
// 强制使用 SSL 验证
phpCAS::setNoCasServerValidation();
用户认证
实现用户登录和认证的逻辑:
// 强制用户认证
phpCAS::forceAuthentication();
// 检查用户是否已登录
if (phpCAS::isAuthenticated()) {
// 获取用户信息
$username = phpCAS::getUser();
$attributes = phpCAS::getAttributes();
// 用户已登录,执行后续操作
echo "Welcome, " . $username;
} else {
// 用户未登录,重定向到 CAS 登录页面
phpCAS::redirectToCas();
}
用户注销
实现用户注销的逻辑:
// 用户注销
if (isset($_GET['logout'])) {
phpCAS::logout();
}
高级配置
如果需要更高级的配置,可以设置代理模式或自定义属性:
// 启用代理模式
phpCAS::proxy(CAS_VERSION_2_0, 'cas.example.com', 443, '/cas');
// 设置自定义属性
phpCAS::setFixedServiceURL('https://your-service.com/auth');
错误处理
处理 CAS 认证过程中可能出现的错误:
try {
phpCAS::forceAuthentication();
} catch (Exception $e) {
// 记录错误信息
error_log('CAS authentication failed: ' . $e->getMessage());
// 显示错误页面或重定向
header('Location: /error.php');
exit;
}
示例完整代码
以下是一个完整的 CAS 认证示例:
require_once 'vendor/autoload.php';
use phpCAS;
// 初始化 CAS 客户端
phpCAS::client(CAS_VERSION_2_0, 'cas.example.com', 443, '/cas');
phpCAS::setCasServerCACert('/path/to/cas_cert.pem');
// 处理注销请求
if (isset($_GET['logout'])) {
phpCAS::logout();
}
// 强制用户认证
phpCAS::forceAuthentication();
// 用户已登录
if (phpCAS::isAuthenticated()) {
$username = phpCAS::getUser();
$attributes = phpCAS::getAttributes();
echo "Welcome, " . $username;
echo "<a href='?logout'>Logout</a>";
}
注意事项
- 确保 CAS 服务器的地址和端口配置正确。
- 在生产环境中使用 HTTPS 并配置正确的证书。
- 根据实际需求调整 CAS 版本(如
CAS_VERSION_2_0或CAS_VERSION_3_0)。 - 处理用户属性时注意数据安全和隐私。







