首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAS4.0服务管理Web应用程序-未授权使用CAS的应用程序

CAS4.0服务管理Web应用程序-未授权使用CAS的应用程序
EN

Stack Overflow用户
提问于 2016-07-18 07:09:05
回答 1查看 2.3K关注 0票数 0

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

但是我遇到了麻烦,如果我访问http://localhost/program/phpcas/CodeIgniter-3.0.6/,就会从cas那里得到一个消息错误:

应用程序未授权使用 您试图对其进行身份验证的应用程序未被授权使用CAS。

以下是CAS代码:

ServiceManagementWebApplication-52497044623301.json

代码语言:javascript
复制
{
  "@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",
}

propertyFileConfigurer.xml

代码语言:javascript
复制
<?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>

下面是使用CI3访问这个url的PHPCAS:

config/cas.php

代码语言:javascript
复制
<?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;

libraries/cas.php

代码语言:javascript
复制
<?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();
    }
}

控制器

代码语言:javascript
复制
public function index(){
    $this->load->library('cas');
    $this->cas->force_auth();
    $user = $this->cas->user();
    echo "<h1>Hello, $user->userlogin!</h1>";
}

拜托,如果你知道怎么修理它,你能告诉我吗?

EN

回答 1

Stack Overflow用户

发布于 2016-07-26 15:03:50

如果您正在使用CAS 4.0.x,则必须在deployerConfigContext.xml中授权您的服务。它可以在src/main/webapp/WEBINF/中找到。在该文件中,您将发现多个默认配置。为了演示的目的,在开放模式serviceId="^(https?|imaps?)://.*中使用cas (不重命令)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38430530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档