最近在做thinkphp5.1对接cas5.3的项目,从网上查了好多资料,发现tp5.1对接cas5.3的资料特别少,经过摸索,现已经测试对接成功,能够实现认证,将方法分享给大家,如有更优方案,请留言沟通交流,大家共同进步。
下载phpCAS1.6
没有安装composer的请自行安装
composer require apereo/phpcas
1、修改client.php,支持http协议
文件路径:\tp项目根目录\vendor\apereo\phpcas\source\CAS\Client.php
2、在config/app.php中增加以下配置
//cas配置信息
'server_hostname' => 'www.sso.com', //服务器地址(不能带http://)
'server_port' => 8443, //cas server端口
'server_uri' => '/cas', //cas路径
'service_base_url' => 'http://www.xxx.com', //认证成功后跳转地址,修改为自己的业务系统地址
Base.php拦截控制器代码
注意:端口号不能带引号,否则登录页将出现空白
<?php
//公共控制器
namespace app\index\controller;
use phpCAS;
use think\Controller;
class Base extends Controller
{
protected function initialize()
{
parent::initialize();
//cas配置
$server_hostname = Config::get('app.server_hostname'); //服务器地址
$server_port = Config::get('app.server_port'); //cas server端口
$server_uri = Config::get('app.server_uri');
$service_base_url = Config::get('app.service_base_url'); //认证成功后跳转地址
$phpCAS = new phpCAS();
$phpCAS::setLogger();
$phpCAS::client(CAS_VERSION_2_0, $server_hostname, $server_port, $server_uri,$service_base_url);
$phpCAS::setNoCasServerValidation();
$phpCAS::handleLogoutRequests();
$auth = $phpCAS::forceAuthentication();
if ($auth) {
# 验证通过,或者说已经登陆系统,可进行已经登陆之后的逻辑处理...
} else {
//还未登陆,跳转到CAS进行登陆
$cas_url = 'http://'.Config::get('app.server_hostname').':'.Config::get('app.server_port').Config::get('app.server_uri');
$this->redirect(url($cas_url));
}
}
}
logout登出方法
# 登出方法一:登出成功后跳转的地址
//phpCAS::setServerLoginUrl("https://192.168.1.120:80/cas/logout?embed=true&service=http://localhost/phpCasClient/user.php?a=login");
//phpCAS::logout();
# 登出方法二:退出登录后返回地址
//$param = array("service" => "http://cas.wzh.com");
//phpCAS::logout($param);
/*
* 退出
*/
public function logout()
{
Session::clear();
$logout_url = 'http://'.Config::get('app.server_hostname').':'.Config::get('app.server_port').Config::get('app.server_uri').'/logout';
$this->redirect($logout_url);
}
获得登录用户信息
# 获得登陆CAS用户的名称
$phpCAS = new phpCAS();
$user_name = $phpCAS::getUser();
echo $user_name;
# 还可打印保存的phpCAS session信息
print_r($_SESSION);
# 还可获取有关已验证用户的属性,例如:$uid = phpCAS::getAttribute('id');
# 关于此部分用户属性数据设置说明:https://my.oschina.net/liucao/blog/479755
$attr = $phpCAS::getAttributes();
print_r($attr);