CodeIgniter 的 CAS 身份验证库

2023-12-09

我正在尝试在 CodeIgniter 应用程序中实现 CAS 身份验证,但我找不到当前是否有为其设置的库。我通过只包含类并添加一些肮脏的修复来进行管理,但如果有人知道合适的库,我认为这将是一个更干净的解决方案。

我一直在浏览这里以及谷歌上的一系列帖子,但似乎缺少我需要的东西。唯一相关的地方是一个帖子弗吉尼亚联邦大学图书馆但这不包括库下载链接。

感谢大家!


UPDATE:您可以在 Github 上找到该库的最新版本:https://github.com/eliasdorneles/code-igniter-cas-library

您还可以通过 Spark 安装:http://getsparks.org/packages/cas-auth-library/versions/HEAD/show

我已经启动了一个 CAS 库来简化 CodeIgniter 的 CAS 身份验证设置,该库依赖于现有的phpCAS。 要开始使用它,您只需将 phpCAS 安装在某个可访问的目录中,将库文件放入application/libraries/Cas.php并创建一个配置文件config/cas.php像这样:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['cas_server_url'] = 'https://yourserver.com/cas';
$config['phpcas_path'] = '/path/to/phpCAS-1.3.1';
$config['cas_disable_server_validation'] = TRUE;
// $config['cas_debug'] = TRUE; // <--  use this to enable phpCAS debug mode

然后,在您的控制器中您将能够执行以下操作:

function index() {
    $this->load->library('cas');
    $this->cas->force_auth();
    $user = $this->cas->user();
    echo "Hello, $user->userlogin!";
}

这是库文件(必须命名为Cas.php):

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

function cas_show_config_error(){
    show_error("CAS authentication is not properly configured.<br /><br />
    Please, check your configuration for the following file:
    <code>config/cas.php</code>
    The minimum configuration requires:
    <ul>
       <li><em>cas_server_url</em>: the <strong>URL</strong> of your CAS server</li>
       <li><em>phpcas_path</em>: path to a installation of
           <a href=\"https://wiki.jasig.org/display/CASC/phpCAS\">phpCAS library</a></li>
        <li>and one of <em>cas_disable_server_validation</em> and <em>cas_ca_cert_file</em>.</li>
    </ul>
    ");
}

class Cas {

    public function __construct(){
        if (!function_exists('curl_init')){
            show_error('<strong>ERROR:</strong> You need to install the PHP module <strong>curl</strong>
                to be able to use CAS authentication.');
        }
        $CI =& get_instance();
        $this->CI = $CI;
        $CI->config->load('cas');

        $this->phpcas_path = $CI->config->item('phpcas_path');
        $this->cas_server_url = $CI->config->item('cas_server_url');

        if (empty($this->phpcas_path) 
            or filter_var($this->cas_server_url, FILTER_VALIDATE_URL) === FALSE) {
            cas_show_config_error();
        }
        $cas_lib_file = $this->phpcas_path . '/CAS.php';
        if (!file_exists($cas_lib_file)){
            show_error("Could not find file: <code>" . $cas_lib_file. "</code>");
        }
        require_once $cas_lib_file;

        if ($CI->config->item('cas_debug')) {
            phpCAS::setDebug();
        }

        // init CAS client
        $defaults = array('path' => '', 'port' => 443);
        $cas_url = array_merge($defaults, parse_url($this->cas_server_url));

        phpCAS::client(CAS_VERSION_2_0, $cas_url['host'],
            $cas_url['port'], $cas_url['path']);

        // configures SSL behavior
        if ($CI->config->item('cas_disable_server_validation')){
            phpCAS::setNoCasServerValidation();
        } else {
            $ca_cert_file = $CI->config->item('cas_server_ca_cert');
            if (empty($ca_cert_file)) {
                cas_show_config_error();
            }
            phpCAS::setCasServerCACert($ca_cert_file);
        }
    }

    /**
      * Trigger CAS authentication if user is not yet authenticated.
      */
    public function force_auth()
    {
        phpCAS::forceAuthentication();
    }

    /**
     *  Return an object with userlogin and attributes.
     *  Shows aerror if called before authentication.
     */
    public function user()
    {
        if (phpCAS::isAuthenticated()) {
            $userlogin = phpCAS::getUser();
            $attributes = phpCAS::getAttributes();
            echo "has attributes? ";
            var_dump(phpCAS::hasAttributes());
            return (object) array('userlogin' => $userlogin,
                'attributes' => $attributes);
        } else {
            show_error("User was not authenticated yet.");
        }
    }

    /**
     *  Logout and redirect to the main site URL,
     *  or to the URL passed as argument
     */
    public function logout($url = '')
    {
        if (empty($url)) {
            $this->CI->load->helper('url');
            $url = base_url();
        }
        phpCAS::logoutWithRedirectService($url);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodeIgniter 的 CAS 身份验证库 的相关文章

  • 通过身份验证保护 CodeIgniter 2 应用程序的正确方法是什么?

    I have Ion Auth http benedmunds com ion auth 正确安装并在我的服务器上运行 我也有默认的代码点火器2 新闻 教程在同一个 CI 安装中工作 我只是在玩 并对使用身份验证系统 封闭 或保护整个应用程
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带
  • Smarty 如果 URL 包含

    使用 Smarty 标签我想确定 URL 是否包含单词 例如 if smarty get page contains product php 我知道 contains 不存在 但是我怎样才能轻松地编写类似的东西来实现上述代码呢 所有 PHP
  • php中的条件格式化html表与时间戳比较

    echo table style width 100 tr echo td Order td echo td Destination td echo td Location td echo td Status td echo td Time
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • 媒体的 Google Cloud Storage 签名网址

    我已经建立了一个视频网站 为用户提供 m3u8 和关联的 ts 文件 我不希望媒体文件免费可用 所以我所做的是 当用户在网站上时 在 mysql 中使用他们的 IP 和令牌创建一个会话 当他们请求特定媒体子域 mp4 domain com
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 从所有会话中注销

    我有一个注销选项 这是我的代码 session start session destroy setcookie key time 60 60 24 setcookie username time 60 60 24 我想添加另一个选项来注销所
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 如何在 JSF 中实现登录过滤器?

    即使用户知道某些页面的网址 我也想阻止某些页面的访问 例如 localhost 8080 user home xhtml 需要先登录 如果没有登录则重定向到 index xhtml 在 JSF 中如何做到这一点 我在谷歌上看到需要一个过滤器
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 当使用 jQuery on() 时,为什么使用 (document) 而不是元素本身?

    我希望 jQuery 专家用自己的话来解释为什么其他人建议在 jQuery 的 on 语句中使用 document 标识符 而不是仅仅使用元素本身 示例 1 为什么这里使用 document 比示例 2 更好 document on cli
  • 为什么 Ruby 中的 032 与 32 不同? [复制]

    这个问题在这里已经有答案了 我注意到 Ruby 在使用 032 和 32 时表现不同 我曾经因为代码中使用 032 而不是 32 而出现语法错误 谁可以给我解释一下这个 或者我的代码本身真的有问题吗 你看到的是032是八进制表示形式 并且3
  • Yesod/持久一对一查询

    比如说 在 Yesod Persistent 中 我的模型设置如下 User ident Text password Text Maybe UniqueUser ident Question title Text asker UserId
  • 如何从 C 的“getcwd”函数返回 std::string

    很抱歉一直在讨论这个 但我正在努力学习 这有什么好处吗 是的 我关心内存泄漏 我找不到预分配 char 的好方法 因为似乎没有跨平台的方法 const string getcwd char a cwd getcwd NULL 0 strin
  • 使用 System.out.format 和 System.out.println 进行多线程

    我遇到了这个exampleOracle 的 Java 教程描述了多线程场景中的死锁 因此 在此示例中 我在第 17 行和第 18 行进行了以下更改 public class DeadLock static class Friend priv
  • 如何“完美”覆盖字典?

    我怎样才能使一个子类 完美 dict尽可能 最终目标是有一个简单的dict其中键是小写的 似乎应该有一些我可以重写的基本原语来使这项工作正常进行 但根据我所有的研究和尝试 情况似乎并非如此 If I 覆盖 getitem setitem t
  • 在这种情况下不理解 json_agg

    参考 查询包含 JSON 对象数组的 jsonb 列 begin CREATE TEMP TABLE segments segments id serial PRIMARY KEY payload jsonb INSERT INTO seg
  • 构造函数依赖注入 WebApi 属性

    我一直在寻找 WebApi 属性的非参数注入选项 我的问题是使用 Structuremap 是否真的可以实现这一点 我一直在谷歌搜索 但不断提出属性注入 我不喜欢使用 或构造函数注入的假设实现 但迄今为止我无法复制 我选择的容器是 Stru
  • C# guid 和 SQL uniqueidentifier

    我想创建一个 GUID 并将其存储在数据库中 在 C 中 可以使用 Guid NewGuid 创建 guid 这将创建一个 128 位整数 SQL Server 有一个 uniqueidentifier 列 其中包含一个巨大的十六进制数字
  • Plotly:如何在不同的轨迹上绘制带有时间值的标记?

    我有2个数据框 df1 包含列 time bid price df2 包含列 time flag 我想将 df1 的时间序列绘制为折线图 并且我想在 df2 flag 列值 True 的时间点上的点上放置标记 我怎样才能做到这一点 您可以通
  • 从任何地方访问 Azure SQL 数据库

    我们为赛车运动开发了一个基于 SQL 的应用程序 我们的一些客户正在考虑使用 Azure 来保存数据库 问题是他们到世界各地参加比赛 因此需要使用他们拥有的任何互联网连接来访问数据库 并且无法在防火墙规则中预先定义 IP 地址 是否可以有效
  • 如何模拟类方法(+)? [复制]

    这个问题在这里已经有答案了 需要为以下代码编写单元测试 我想对类方法canMakePayments进行mock 返回yes或no 到目前为止没有找到好的方法 因为canMakePayments是一个类方法 似乎所有OCMock方法都用于实例
  • Pandas 根据列中的值将数据帧拆分为多个 csv

    我有个问题与此类似但我需要采取进一步的措施 问题是我的文件包含 50k 多行 每行有 4 个值 Indicator Country Date 和 value 我想根据国家 地区拆分我的 CSV 我不知道有多少个国家 地区 因此所有名称相似的
  • 如何从 Pyspark 中的 Spark 数据帧创建边缘列表?

    我在用graphframes在 pyspark 中进行某些图形类型的分析 并想知道从顶点数据框架创建边列表数据框架的最佳方法是什么 例如 下面是我的顶点数据框 我有一个 id 列表 它们属于不同的组 id group a 1 b 2 c 1
  • 如何在 Python 中解释离散傅里叶变换 (FFT) 的结果

    关于这个主题有很多问题 我已经循环浏览了其中很多问题 获得了有关处理频率的概念性指导 here and here 有关 numpy 函数的文档 here 有关提取幅度和相位的操作信息 here 并走出站点 例如this or this 然而
  • 如何在 C# 中将行筛选的 DataGridView 设置为 DataTable

    我有 DataGridview 我过滤了其中的一些行 我需要将新数据源保存到新的 DataTable 由于某种原因我当前的代码不起作用 这里我如何尝试转换它 LogGridView DataSource as DataTable Defau
  • 通过子项无限嵌套 ngFor

    我发现了一些关于 Angular2 中嵌套 ngFor 循环的问题 但不是我正在寻找的问题 我想在列表中显示类别 我的 JSON 看起来像这样 Categories Title Categorie A Children Title Sub
  • 如何检索 LoaderExceptions 属性?

    我在更新服务参考时收到错误消息 自定义工具警告 无法加载一种或多种请求的类型 检索 LoaderExceptions 属性以获取更多信息 如何检索 LoaderExceptions 属性 Update 当我重新导入域对象项目时 我的错误消失
  • 在张量流中将 1 通道掩模应用于 3 通道张量

    我正在尝试将掩码 二进制 仅一个通道 应用于 RGB 图像 3 个通道 标准化为 0 1 我当前的解决方案是 我将 RGB 图像分割成它的通道 将其与蒙版相乘 然后再次连接这些通道 with tf variable scope apply
  • CodeIgniter 的 CAS 身份验证库

    我正在尝试在 CodeIgniter 应用程序中实现 CAS 身份验证 但我找不到当前是否有为其设置的库 我通过只包含类并添加一些肮脏的修复来进行管理 但如果有人知道合适的库 我认为这将是一个更干净的解决方案 我一直在浏览这里以及谷歌上的一