尝试通过我的Laravel项目设置CAS

时间:2019-04-23 10:24:12

标签: laravel laravel-5 cas

我正在为我的申请使用subfission/cas。我已经关注了所有installation steps。我正在使用Windows,如果那很重要的话。更准确地说,我已经配置了以下内容:

我在终端中运行了以下内容

composer require "subfission/cas" "dev-master"

我相应地配置了Kernel.php,并添加了以下内容:

'cas.auth'  => 'Subfission\Cas\Middleware\CASAuth',
'cas.guest' => 'Subfission\Cas\Middleware\RedirectCASAuthenticated',

我运行了以下命令:

php artisan vendor:publish

我还在cas.php配置文件中设置了cas服务器:

'cas_hostname'        => env('CAS_HOSTNAME', 'cas.myserver.me'),
'cas_real_hosts'      => env('CAS_REAL_HOSTS', 'cas.myserver.me'),

我想要的是所有路由的中间件,因此我在路由中添加了以下路由规则:

Route::middleware(['cas.auth'])->group(function ()
{
    Route::get('/', function ()
    {
        return view('welcome');
    });
});

基本上,我想在访问主页时将所有未登录的用户重定向到登录页面(目前,将来我将添加更多路由)。发生的情况是,当用户未登录时,他们被重定向到登录页面,但是登录后,我收到以下错误:

  

ErrorException(E_WARNING)   DOMDocument :: loadXML():开头和结尾标签不匹配:第1行和Entity中的正文,第1行:

无论我要将用户重定向到哪个视图。我尝试了默认的欢迎页面以及空白视图,但仍然遇到相同的错误。

编辑:我已经使用subfission / cas的dev-master分支来解决上述错误,切换到2.1.1后,我得到了另一个错误:

  

session_name():标头已发送时无法更改会话名称

编辑2:我做了更多的挖掘工作,并使用以下命令在cas客户端类中启用了内部错误:

libxml_use_internal_errors(true);

现在我得到以下信息:

Authentication failure: SA not validated Reason: bad response from the CAS server

cas响应为: Cas error 事实是,我将同一个cas服务器用于另外两个项目,并且对那些项目效果很好(但那不是laravel项目。

2 个答案:

答案 0 :(得分:2)

我知道已经有一段时间了,但是对于其他遇到这种问题的人来说,问题是网络服务与CAS(中央身份验证服务)提供程序进行通信所选择的协议。此软件包中用于SSO / CAS的主要协议有两种:

  1. SAML(安全声明标记语言)版本1.1和2
  2. CAS协议v3.0

[令人困惑的是,CAS协议与服务共享相同的名称空间。]

该想法是使协议和版本与您的身份提供者匹配。听起来您的提供者正在使用CASv3.0,这就是禁用SAML起作用的原因。

此外,如果启用调试模式,您将在日志文件中看到更多错误详细信息,以帮助您进行故障排除。

祝你好运!

答案 1 :(得分:0)

我设法通过在cas配置文件中禁用SAML来解决了这个问题:

'cas_enable_saml'     => env('CAS_ENABLE_SAML', true), -> cas_enable_saml'     => env('CAS_ENABLE_SAML', false),