# `1.CAS`單點登陸原理
關于CAS單點登陸原理,本人查到一篇講解的比較詳細的文章:[https://www.cnblogs.com/lihuidu/p/6495247.html](https://www.cnblogs.com/lihuidu/p/6495247.html)此文章講解的非常通俗易懂。
# `2.搭建`CAS SSO`SERVER服務端
關于此類教程文章推薦查看:[https://www.cnblogs.com/jpeanut/tag/CAS/](https://www.cnblogs.com/jpeanut/tag/CAS/)
# `3.下載`phpCAS`客戶端
1. phpCAS客戶端下載:[https://github.com/apereo/phpCAS](https://www.cnblogs.com/jpeanut/tag/CAS/)
2. phpCAS客戶端配置的注意事項說明:[https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252517/phpCAS](https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252517/phpCAS)
3. phpCAS客戶端的要求說明:[https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252625/phpCAS+requirements](https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252625/phpCAS+requirements)
***注意:PHP配置文件php.ini需要開啟php\_curl,找到 ;extension=php\_curl.dll ,將該句前面的分號去掉即可,改為 extension=php\_curl.dll***
# `4. phpCAS客戶端配置
下載完成之后可得到一個壓縮包文件,解壓之后文件夾存在`source`,`source`文件夾下包含`CAS`文件夾和`CAS.php`文件。
創建自己的PHP項目,至于用什么框架,和開發工具,這兒就不說了,各有各的需求。將同步下來的代碼的`source`目錄拷貝到項目中,可以改名`phpCAS`之類的,以作區分。
項目中怎么使用呢?之后我們開始講解如何開發配置:
1. 將`source`文件夾放到開發項目的根目錄下;
2. 在項目根目錄下新建`config.php`文件,用于CAS配置;
3. 在項目根目錄下新建`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';
```
# 5.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>';
}
```## 注意
1. 如果無法獲取Attributes,請將`CAS_VERSION_2_0`改成`CAS_VERSION_3_0`,相關設置說明:[https://my.oschina.net/liucao/blog/479755](https://my.oschina.net/liucao/blog/479755);
2. 設置`phpCAS::handleLogoutRequests();`后不能同步退出,可能是因為cas服務端無法連接測試環境的域名。當我們訪問cas服務端的logout的時候,cas服務器會發送post請求到各個已經登錄的客戶端;
3. `phpCAS::logout(['service'=>'http://cas.wzh.com']);`設置退出登錄后返回的頁面。
- 公共頁面js
- 公共頁面添加js
- 公共頁面編輯js
- 公共頁面列表js
- 文件上傳方法
- 分類相關
- 獲取ip
- Response類
- Curl類
- JWT
- tp5.1下redis的使用
- tp5.1使用RabbitMQ
- tp5.1+easywechat相關
- tp5.1+easywechat實現小程序登錄
- uniapp頁面
- tp控制器
- git相關操作
- php文件操作
- 大文件上傳
- laravel隊列
- 1.安裝laravel并進行相關配置
- nginx反向代理解決微信公眾號,小程序,微信支付域名限制,回調
- readme
- do
- 雜項
- cas單點登錄
- tp6跨域(中間件不起作用版)
- php算法
- 冒泡排序
- knn算法
- 使用es
- 使用mongdb
- tp6+rabbirmq
- 一些問題
- php文件操作/文件操作的一些方法
- 客戶端請求相關