CAS4.2.7 的 php 客户端1.3.5 的简单实践

2024-01-02 07:50

本文主要是介绍CAS4.2.7 的 php 客户端1.3.5 的简单实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CAS作为开源的sso项目,很多人都在使用,网上也很多教程,但是普遍都比较老的版本,时间也很久了,目前我的项目需要用到单点登录,我找了cas比较新的版本来做部署,经过一周的折腾,终于调试成功,现将经验说明如下。

CAS Server需单独部署,我部署的是4.2.7的版本,环境windows7 x64 + jdk8 + tomcat8,网上下载CAS server的war包,解压后修改配置,放到tomcat的webapps下运行即可。此处不详述,以后有空再写cas sever的配置过程。

CAS client的java版本,我本机也已经配置,大概步骤就是maven的pom.xml添加cas的依赖包,web.xml配置5个过滤器和1个监听器,然后把原系统的登录页去掉,原登录验证的过滤器或者拦截器改一下就ok了,具体不详述,本文的重点是php。


php cas 配置步骤:


    1、先新建一个php项目phpproj,我用的PhpStorm.


    2、从官网下载php的client, https://wiki.jasig.org/display/CASC/phpCAS

          选择 download 下面的 Current Version,我目前的是1.3.5.

          解压后把CAS-1.3.5下的CAS目录拷贝到工程目录phpproj下,把CAS-1.3.5\CAS.php拷贝到工程目录下,把CAS-1.3.5\docs\examples\config.example.php、script_info.php拷贝到工程目录下,config.example.php改名config.php。我的项目结构如下:



    3、修改配置config.php


$cas_host = ‘localhost’,
$cas_context = '/cas',
$cas_port = 8443
$cas_real_hosts = array('localhost', 'localhost');
$client_domain = 'localhost';
$client_path = 'phpproj';
$rebroadcast_node_1 = 'http://localhost:81';
$rebroadcast_node_2 = 'http://localhost:81';
我的config.php如下:
<?php/*** The purpose of this central config file is configuring all examples* in one place with minimal work for your working environment* Just configure all the items in this config according to your environment* and rename the file to config.php** PHP Version 5** @file     config.php* @category Authentication* @package  PhpCAS* @author   Joachim Fritschi <jfritschi@freenet.de>* @author   Adam Franco <afranco@middlebury.edu>* @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0* @link     https://wiki.jasig.org/display/CASC/phpCAS*/$phpcas_path = '../../source/';///
// Basic Config of the phpCAS client //
///// Full Hostname of your CAS Server
$cas_host = 'localhost';// Context of the CAS Server
$cas_context = '/cas';// Port of your CAS server. Normally for a https server it's 443
$cas_port = 8443;// Path to the ca chain that issued the cas server certificate
$cas_server_ca_cert_path = '/path/to/cachain.pem';//
// Advanced Config for special purposes //
//// The "real" hosts of clustered cas server that send SAML logout messages
// Assumes the cas server is load balanced across multiple hosts
$cas_real_hosts = array('localhost', 'localhost');// Client config for cookie hardening
$client_domain = 'localhost';
$client_path = 'phpproj';
$client_secure = true;
$client_httpOnly = true;
$client_lifetime = 0;// Database config for PGT Storage
$db = 'pgsql:host=localhost;dbname=phpcas';
//$db = 'mysql:host=localhost;dbname=phpcas';
$db_user = 'phpcasuser';
$db_password = 'mysupersecretpass';
$db_table = 'phpcastabel';
$driver_options = '';///
// End Configuration -- Don't edit below //
///// Generating the URLS for the local cas example services for proxy testing
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {$curbase = 'https://' . $_SERVER['SERVER_NAME'];
} else {$curbase = 'http://' . $_SERVER['SERVER_NAME'];
}
if ($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {$curbase .= ':' . $_SERVER['SERVER_PORT'];
}$curdir = dirname($_SERVER['REQUEST_URI']) . "/";// CAS client nodes for rebroadcasting pgtIou/pgtId and logoutRequest
$rebroadcast_node_1 = 'http://localhost:81';
$rebroadcast_node_2 = 'http://localhost:81';// access to a single service
$serviceUrl = $curbase . $curdir . 'example_service.php';
// access to a second service
$serviceUrl2 = $curbase . $curdir . 'example_service_that_proxies.php';$pgtBase = preg_quote(preg_replace('/^http:/', 'https:', $curbase . $curdir), '/');
$pgtUrlRegexp = '/^' . $pgtBase . '.*$/';$cas_url = 'https://' . $cas_host;
if ($cas_port != '443') {$cas_url = $cas_url . ':' . $cas_port;
}
$cas_url = $cas_url . $cas_context;// Set the session-name to be unique to the current script so that the client script
// doesn't share its session with a proxied script.
// This is just useful when running the example code, but not normally.
session_name('session_for:'. preg_replace('/[^a-z0-9-]/i', '_', basename($_SERVER['SCRIPT_NAME']))
);
// Set an UTF-8 encoding header for internation characters (User attributes)
header('Content-Type: text/html; charset=utf-8');
?>

4、用个简单页面做测试,把CAS-1.3.5\docs\examples\example_simple.php拷贝到工程目录,
修改require_once $phpcas_path . '/CAS.php'; 为
require_once  'CAS.php';
添加
phpCAS::setLang(PHPCAS_LANG_CHINESE_SIMPLIFIED);
支持中文。

这样配置就做好了。

5、现在重启apache,注意php需要添加curl库,php用ticket到认证服务器校验票据时会用到,不知道怎么加的亲们看我的上一篇文章。

访问 http://localhost:81/phpproj/example_simple.php ,就会出现cas server的登录页:




输入用户密码登录成功后即跳转回本页面:




然后同一个浏览器内关掉这个页,再重新打开,或者直接刷新,不会再出现登录页面。 我访问java的cas客户端项目登录后,再打开这个php项目,也无需登录直接可进入,并显示登录用户

这样php的客户端就配置完成!

CAS Sever还可以携带除登录名外的其他用户信息给客户端,php接收用户信息的代码如下:
<?php
$attr_array = phpCAS::getAttributes();
foreach($attr_array as $x=>$x_value)
{echo "cas server返回的用户属性 $x = $x_value";echo "<br>";
}
?>
效果图:




当然这只是最简单的配置,实际项目中,还有许多细节要处理,比如登录成功后 添加session属性值等。


这篇关于CAS4.2.7 的 php 客户端1.3.5 的简单实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/561801

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件