【发布时间】:2016-07-18 07:09:05
【问题描述】:
任何人都可以帮助我,因为我真的不了解 CAS(新手)。
我有 url http://localhost/program/phpcas/CodeIgniter-3.0.6/ ,如果有人访问该 url 应该重定向/使用 http://localhost:8080/cas 中的 SSO CAS。
但是我遇到了麻烦,如果我访问http://localhost/program/phpcas/CodeIgniter-3.0.6/,我会收到来自 cas 的消息错误:
应用程序未授权使用 CAS
您尝试对其进行身份验证的应用程序未被授权使用 CAS。
这是 CAS 代码:
ServiceManagementWebApplication-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",
}
propertyFileConfigurer.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>
这里是使用 CI3 的 PHPCAS :
config/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 覆盖模板。我没有找到文件 propertyFileConfigurer.xml
标签: php codeigniter cas