尝试使用我的 Laravel 项目设置 CAS

Trying to set up CAS with my Laravel project

我正在使用 subfission/cas for my application. I have followed all 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(): Opening and ending tag mismatch: hr line 1 and body in Entity, line: 1

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

编辑:我使用 subfission/cas 的 dev-master b运行ch 来解决上述错误,在切换到 2.1.1 后,我得到了一个不同的错误:

session_name(): Cannot change session name when headers already sent

编辑 2:我做了更多挖掘,并在我的 cas 客户端 class 中启用了内部错误:

libxml_use_internal_errors(true);

现在我得到以下信息:

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

cas 响应是: 问题是我对另外 2 个项目使用相同的 cas 服务器,它对那些项目运行良好(但那些不是 laravel 项目。

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

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

改为

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

我知道这已经有一段时间了,但对于遇到此类问题的其他人来说,问题在于您的 Web 服务与 CAS(中央身份验证服务)提供商通信所选择的协议。此包中有两个用于 SSO/CAS 的主要协议:

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

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

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

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

祝你好运!