基于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客户端其一可以正常登录了,另一个还是需要登录两次。。崩溃中
posted @ 2017-07-19 17:51  真理君的宿敌  阅读(8619)  评论(5编辑  收藏  举报