CAS 4.0 服务管理 Web 应用程序 - 应用程序无权使用 CAS


CAS 4.0 Services Management Web Application - Application Not Authorized to Use CAS

谁能帮我,因为我真的不明白 CAS(新手)。我有网址http://localhost/program/phpcas/CodeIgniter-3.0.6/,如果有人访问该网址,则应在http://localhost:8080/cas中重定向/使用 SSO CAS。

但是我遇到了麻烦,如果我访问http://localhost/program/phpcas/CodeIgniter-3.0.6/我从 cas 收到消息错误:

应用程序无权使用 CAS

您尝试进行身份验证的应用程序无权使用 CAS。

这是CAS代码:

服务管理Web应用程序-52497044623301.json

{
  "@class" : "org.jasig.cas.services.RegexRegisteredService",
  "serviceId" : "^http://localhost/program/phpcas/CodeIgniter-3.0.6/",
  "name" : "Services Management Web Application",
  "id" : 52497044623301,
  "description" : "Services Management Web Application",
}

属性文件配置器.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <description>
        This file lets CAS know where you've stored the cas.properties file which details some of the configuration
        options
        that are specific to your environment. You can specify the location of the file here. You may wish to place the
        file outside
        of the Servlet context if you have options that are specific to a tier (i.e. test vs. production) so that the
        WAR file
        can be moved between tiers without modification.
    </description>
    <util:properties id="casProperties" location="${cas.properties.config.location:/WEB-INF/cas.properties}"/>
    <context:property-placeholder properties-ref="casProperties"/>
</beans>

以下是 PHPCAS 为此 url 使用 CI3 :

配置/CAS.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['cas_server_url'] = 'http://localhost:8080/cas';
$config['phpcas_path'] = 'application/libraries/phpcas/source';
$config['cas_disable_server_validation'] = TRUE;

图书馆/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><a href="http://php.net/curl">curl</a></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("<strong>ERROR:</strong> Could not find a file <em>CAS.php</em> in directory
                <strong>$this->phpcas_path</strong><br /><br />
                Please, check your config file <strong>config/cas.php</strong> and make sure the
                configuration <em>phpcas_path</em> is a valid phpCAS installation.");
        }
        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 
     */
    public function user()
    {
        if (phpCAS::isAuthenticated()) {
            $userlogin = phpCAS::getUser();
            $attributes = phpCAS::getAttributes();
            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);
    }
    public function is_authenticated()
    {
        return phpCAS::isAuthenticated();
    }
}

控制器

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

拜托,如果你知道如何解决它,你能告诉我吗?

如果您使用的是 CAS 4.0.x,则必须在 deployerConfigContext 中授权您的服务.xml 。它位于 src/main/webapp/WEBINF/中。在文件中,您将找到多个默认配置。出于演示目的,请在开放模式serviceId="^(https?|imaps?)://.*中使用 cas(不推荐)。