Библиотека аутентификации CAS для CodeIgniter - PullRequest
1 голос
/ 17 апреля 2011

Я пытаюсь реализовать аутентификацию CAS в приложении CodeIgniter, хотя не могу найти, есть ли какие-либо библиотеки, настроенные для него в настоящее время.Я управляю, просто включив класс и добавив несколько грязных исправлений, хотя, если кто-то знает правильную библиотеку, я думаю, что это будет более чистое решение.

Я просматривал ряд постов здесь, какну, как и во всем Google, но, похоже, не хватает того, что мне нужно.Единственное место, которое имеет отношение к делу, - это сообщение в VCU Libraries , но в нем не было ссылки на скачивание библиотеки.

Спасибо всем!

Ответы [ 3 ]

3 голосов
/ 04 августа 2012

ОБНОВЛЕНИЕ: Вы можете найти последнюю версию библиотеки на Github: https://github.com/eliasdorneles/code-igniter-cas-library

Вы также можете установить с помощью искр: http://getsparks.org/packages/cas-auth-library/versions/HEAD/show

Я запустил библиотеку CAS, чтобы упростить настройку аутентификации CAS для CodeIgniter, которая опирается на существующий 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);
    }
}
0 голосов
/ 18 апреля 2011

Что именно не работает с библиотекой 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

0 голосов
/ 18 апреля 2011

Я рекомендую использовать Ion Auth Library , она основана на Redux Auth, которая устарела. Ion Auth - это легкий вес, его легко настроить и он делает то, что вам нужно. Ion Auth - одна из лучших библиотек аутентификации для CodeIgniter.

...