尝试使用我的 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 的主要协议:
- SAML(安全断言标记语言)版本 1.1 和 2
- CAS 协议 v3.0
[令人困惑的是,CAS 协议与服务共享相同的命名空间。]
想法是将协议和版本与您的身份提供者相匹配。听起来您的提供商正在使用 CASv3.0,这就是禁用 SAML 起作用的原因。
此外,如果启用调试模式,您将在日志文件中看到更多错误详细信息以帮助您进行故障排除。
祝你好运!
我正在使用 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 响应是:
我通过在 cas 配置文件中禁用 SAML 设法解决了这个问题:
'cas_enable_saml' => env('CAS_ENABLE_SAML', true),
改为
'cas_enable_saml' => env('CAS_ENABLE_SAML', false),
我知道这已经有一段时间了,但对于遇到此类问题的其他人来说,问题在于您的 Web 服务与 CAS(中央身份验证服务)提供商通信所选择的协议。此包中有两个用于 SSO/CAS 的主要协议:
- SAML(安全断言标记语言)版本 1.1 和 2
- CAS 协议 v3.0
[令人困惑的是,CAS 协议与服务共享相同的命名空间。]
想法是将协议和版本与您的身份提供者相匹配。听起来您的提供商正在使用 CASv3.0,这就是禁用 SAML 起作用的原因。
此外,如果启用调试模式,您将在日志文件中看到更多错误详细信息以帮助您进行故障排除。
祝你好运!