【问题标题】:CAS Authentication Library for CodeIgniterCodeIgniter 的 CAS 身份验证库
【发布时间】:2011-08-07 09:19:15
【问题描述】:

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

我一直在查看这里以及整个 Google 上的一系列帖子,但似乎缺少我需要的内容。唯一相关的地方是VCU Libraries 上的帖子,但不包括库下载链接。

谢谢大家!

【问题讨论】:

    标签: php authentication codeigniter cas


    【解决方案1】:

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

    您也可以通过 sparks 安装: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);
        }
    }
    

    【讨论】:

    • 你考虑过把它加入 github 吗?
    • 谢谢,我想也许我应该等待别人认为这很有趣。我想时间已经到了,我会尽快做的! :)
    • 我设置了GitHub repospark
    【解决方案2】:

    我推荐使用Ion Auth Library,它建立在已经过时的 Redux Auth 之上。 Ion Auth 重量轻,易于定制,可以满足您的需求。 Ion Auth 是 CodeIgniter 最好的身份验证库之一。

    【讨论】:

    • 我必须同意这一点。 Ion Auth 非常轻量级,易于实现和定制。此外,CodeIgniter 应该在某个时候内置自己的身份验证 (codeigniter.uservoice.com)。
    • Ion Auth 很不错,但你还是需要自己编写 CAS 组件。
    • Ion Auth 看起来确实很可靠,我坚持使用 CAS 的唯一原因是它需要与其他人的记录集成。将看看这个并尝试合并CAS。谢谢
    【解决方案3】:

    VCU 库究竟是什么不工作?

    任何你可以在 PHP 中做的事情,你都可以在 CodeIgniter 中做。 所以你可以只使用 PHP CAS 客户端: http://www.jasig.org/phpcas-121-final-release

    这是一个如何进行身份验证的示例。

    https://source.jasig.org/cas-clients/phpcas/trunk/docs/examples/example_simple.php

    【讨论】:

    • 您链接的客户端是我当前使用的客户端。我面临的唯一问题是包含库我需要 CAS 库的多个副本,因为我的主机可以防止文件链接并在我包含在文件夹上方时引发错误。我认为有一个专门用于它的库会使它更简单的包含
    猜你喜欢
    • 2010-10-15
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2015-04-18
    相关资源
    最近更新 更多