PHP使用phpCAS对接CAS单点登陆系统
PHP使用phpCAS对接CAS单点登陆系统
- 综述
- `CAS`单点登陆原理
- 搭建`CAS SSO`SERVER服务端
- 下载`phpCAS`客户端
- phpCAS客户端配置
- PHP开发对接
- 注意
综述
本文档用来说明如何使用PHP对接CAS单点登陆系统。
想要对接使用CAS单点登陆,我们首先需要了解什么是单点登陆。本博文主要对下面几项进行说明:
- 了解CAS单点登录原理解析
- 搭建
CAS SSO
SERVER服务端; - 下载
phpCAS
客户端 - phpCAS客户端配置
- 进行PHP开发对接
CAS
单点登陆原理
关于CAS单点登陆原理,本人查到一篇讲解的比较详细的文章:https://www.cnblogs.com/lihuidu/p/6495247.html 此文章讲解的非常通俗易懂。
搭建CAS SSO
SERVER服务端
关于此类教程文章推荐查看:https://www.cnblogs.com/jpeanut/tag/CAS/
下载phpCAS
客户端
- phpCAS客户端下载:https://github.com/apereo/phpCAS
- phpCAS客户端配置的注意事项说明:https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252517/phpCAS
- phpCAS客户端的要求说明:https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252625/phpCAS+requirements
注意:PHP配置文件php.ini需要开启php_curl,找到 ;extension=php_curl.dll ,将该句前面的分号去掉即可,改为 extension=php_curl.dll
phpCAS客户端配置
下载完成之后可得到一个压缩包文件,解压之后文件夹存在source
,source
文件夹下包含CAS
文件夹和CAS.php
文件。
创建自己的PHP项目,至于用什么框架,和开发工具,这儿就不说了,各有各的需求。将同步下来的代码的source
目录拷贝到项目中,可以改名phpCAS
之类的,以作区分。
项目中怎么使用呢?之后我们开始讲解如何开发配置:
- 将
source
文件夹放到开发项目的根目录下; - 在项目根目录下新建
config.php
文件,用于CAS配置; - 在项目根目录下新建
index.php
文件,由于首页访问;
config.php文件代码如下:
<?php/*** ==============================================* Created by SaiJia Technology.* Author: ZhiHuaWei <zhihua_wei@foxmail.com>* Date: 2019/9/3 11:04* Project: PHP对接CAS单点登陆系统* Power: CAS配置文件* ==============================================*/# 1 CAS Server 主机域名
# 此配置是你搭建的CAS SSO SERVER服务的域名
$cas_host = 'www.qingshanfrom.xyz';# 2 CAS Server 路径
# 此配置是你搭建的CAS SSO SERVER服务的路径
$cas_context = '/cas';// 3 CAS server 端口
# 此配置是你搭建的CAS SSO SERVER服务的端口
$cas_port = 8443;// 4 CAS server 证书
# 此配置是你搭建的CAS SSO SERVER服务的证书文件
$cas_server_ca_cert_path = './ssoserver.cer';
PHP开发对接
index.php文件代码如下:
<?php/*** ==============================================* Created by SaiJia Technology.* Author: ZhiHuaWei <zhihua_wei@foxmail.com>* Date: 2019/9/3 11:04* Project: PHP对接CAS单点登陆系统* Power: 主文件* ==============================================*/# 1 引入配置文件 | CAS.PHP文件
require_once 'config.php';
require_once 'phpCas/CAS.php';# 2 开启phpCAS debug
phpCAS::setDebug();# 3 初始化phpCAS,参数说明:
# a) CAS协议版本号
# b) cas server的域名
# c) cas server的端口号
# d) cas server的项目访问路径
phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_port, $cas_context);# 4 开启设置证书验证。如果是开发环境可将此注释,如果是生产环境为了安全性建议将此开启
// phpCAS::setCasServerCACert($cas_server_ca_cert_path);# 5 不为CAS服务器设置SSL验证
# 为了快速测试,您可以禁用CAS服务器的SSL验证。此建议不建议用于生产环境。验证CAS服务器对CAS协议的安全性至关重要!
phpCAS::setNoCasServerValidation();# 6 这里会检测服务器端的退出的通知,就能实现php和其他语言平台间同步登出了
# 处理登出请求。cas服务端会发送请求通知客户端。如果没有同步登出,可能是服务端跟客户端无法通信(比如我的客户端是localhost, 服务端在云上)
phpCAS::handleLogoutRequests();# 7 进行CAS服务验证,这个方法确保用户是否验证过,如果没有验证则跳转到验证界面
# 这个是强制认证模式,查看 CAS.php 可以找到几种不同的方式:
# a) forceAuthentication - phpCAS::forceAuthentication();
# b) checkAuthentication - phpCAS::checkAuthentication();
# c) renewAuthentication - phpCAS::renewAuthentication();
# 根据自己需要调用即可。
$auth = phpCAS::forceAuthentication();
if ($auth) {# 8 验证通过,或者说已经登陆系统,可进行已经登陆之后的逻辑处理...# 获得登陆CAS用户的名称$user_name = phpCAS::getUser();echo $user_name . '已经成功登陆...<br>';# 9 你还可打印保存的phpCAS session信息print_r($_SESSION);# 10 还可获取有关已验证用户的属性,例如:$uid = phpCAS::getAttribute('id');# 关于此部分用户属性数据设置说明:https://my.oschina.net/liucao/blog/479755$attr = phpCAS::getAttributes();print_r($attr);# 11 进行退出的相关操作# 在你的PHP项目中处理完相应的退出逻辑之后,还需执行phpCAS::logout()进行CAS系统的退出# 当我们访问cas服务端的logout的时候,cas服务器会发送post请求到各个已经登录的客户端//phpCAS::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);} else {# 12 验证未通过,说明未进行登陆# 将会跳转回你配置的CAS SSO SERVER服务的域名;# 例如:https://www.qingshanfrom.xyz:8443/cas/login?service=http%3A%2F%2Fcas.wzh.com%2F# 在你输入正确的用户名和密码之后CAS会自动跳转回service=http%3A%2F%2Fcas.wzh.com%2F此地址# 在此你可以处理验证未通过的各种逻辑echo '还未登陆,跳转到CAS进行登陆...<br>';
}
注意
- 如果无法获取Attributes,请将
CAS_VERSION_2_0
改成CAS_VERSION_3_0
,相关设置说明:https://my.oschina.net/liucao/blog/479755; - 设置
phpCAS::handleLogoutRequests();
后不能同步退出,可能是因为cas服务端无法连接测试环境的域名。当我们访问cas服务端的logout的时候,cas服务器会发送post请求到各个已经登录的客户端; phpCAS::logout(['service'=>'http://cas.wzh.com']);
设置退出登录后返回的页面。
PHP使用phpCAS对接CAS单点登陆系统相关推荐
- cas单点登陆系统-casServer搭建
最近工作比较忙,空闲的时间在搞单点登陆系统,自己写了一套SSO在GitHub上,过程走通了.通过这个例子,自己熟悉了流程,而且破天荒的使用了抽象设计模式,并且熟悉了cookies和session的使用 ...
- SpringBoot 简单实现仿CAS单点登录系统
SpringBoot 简单实现仿CAS单点登录系统 新境界开源开源SSO项目介绍 新境界开源SSO项目实现原理大致如下: 新境界开源SSO项目登录流程介绍 新境界开源SSO项目授权登录流程介绍 新境界 ...
- 微服务版单点登陆系统(SSO)实践
文章目录 认证步骤 JWT令牌组成 auth项目 自定义令牌类型 resource项目 单点登陆系统简介 背景分析 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 工程结构 ...
- cas client 更新ticket_有人知道 cas单点登录系统是怎么样取得proxyticket的?
展开全部 CAS 原理和协议 从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client.CAS Server 需要独立部署,主要负责62616964757a686964616 ...
- 08-微服务版单点登陆系统(SSO)实践
文章目录 单点登陆系统简介 背景分析 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 工程结构设计 SSO父工程创建及初始化 创建父工程 父工程pom文件初始配置 系统基础 ...
- CAS单点登录系统的实现
CAS单点登录系统的实现 前言 一.CAS思路 二.代码实现 环境准备 代码实现 2.1 MTV系统前端判断是否登录,依据前端cookie是否存在用户信息 2.2 MTV系统前端判断链接是否携带临时票 ...
- 五、微服务版单点登陆系统(SSO)
微服务版单点登陆系统(SSO)实践 文章目录 微服务版单点登陆系统(SSO)实践 一.单点登陆系统简介 1. 背景分析 2. 单点登陆系统概述 3. 单点登陆系统解决方案设计 二.单点登陆系统初步设计 ...
- 微服务版单点登陆系统(SSO)
单体架构中的用户的状态的存储是如何实现的? 单点登陆系统概述 单点登录,英文是 Single Sign On(缩写为 SSO).即多个站点共用一台认证授权服务器,用户在其中任何一个站点登录后,可以免登 ...
- 09-微服务版单点登陆系统(SSO)实践
目录 单点登陆系统简介 背景分析 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 工程结构设计 SSO父工程创建及初始化 创建父工程 父工程pom文件初始配置 系统基础服务 ...
最新文章
- 解决list-style-type属性失效
- 如何解决普通用户使用sudo找不到命令
- linux svn 撤销del,svn delete-删除文件和目录的实例
- 能分清直方图和柱状图,你就是图表届的“头号”玩家|图表家族#36
- POJ2481-Cows【树状数组】
- 认识Java异步编程
- Instruments性能优化-Core Animation
- tornado httpserver
- python | while循环与for循环 | 循环嵌套 | pass通用类型,循环整体结束或开始下一轮循环
- Centos6.3搭建cactinagios
- linux 下常用操作命令
- 秒杀面试 - 程序员面试宝典
- inode客户端linux 怎样运行,H3C_iNode智能客户端安装指导(Linux)
- Android移动开发基础案例教程第2版课后习题
- 2013年计算机毕业生流向,2013年计算机专业应届毕业生自我鉴定
- LeetCode739. Daily Temperatures
- AI2的mosaic和Aristo项目简介
- ANDROID 65536错误
- 匈牙利算法的python实现
- 在一起计时器_设计作品|最佳倒数计时器设计分析「附原型实例」
热门文章
- T156530 儒略历-传智杯-练习赛
- ubuntu下使用mosquitto与分析
- 在线查字典/汉语字典大全/字典查询网站源码开发搭建
- 6 2018-SAE-based classification of school-aged children with ASD using functional magnetic resonanc
- 解密支付宝所谓黑科技神码
- 【学术】可以分享一下关于“社会计算”有哪些国内外顶级会议吗?
- 想在自媒体平台出爆文,这几个爆文素材采集的方法不能丢
- 一名优秀的Web前端开发工程师的成长之路:如何学习前端开发知识以及书籍推荐
- 如何从零自学成为前端工程师,怎么学习?怎么选老师?
- 程序员求职之道(《程序员面试笔试宝典》)之面试笔试技巧?