samuelcalegari / laravel-cas
为 Laravel 提供的 Apereo CAS 身份验证
Requires
- php: >=8.0
- apereo/phpcas: ~1.6.1
- laravel/framework: ^9.19
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2024-09-05 10:43:22 UTC
README
轻松将 CAS 身份验证引入 Laravel 9 和 Apereo PhpCAS 1.6
从以下地址分叉 https://github.com/sentrasoft/laravel-cas
安装
通过 Composer
$ composer require samuelcalegari/laravel-cas:@dev
通过编辑 composer.json
"require": {
...
"samuelcalegari/laravel-cas": "@dev"
},
接下来,从终端更新 Composer
$ composer update
配置
更新 composer 后,将 ServiceProvider 添加到 config/app.php
中的 providers 数组。
'providers' => array( ..... Sentrasoft\Cas\CasServiceProvider::class, );
现在在 config/app.php
中添加别名。
'aliases' => array( ...... 'Cas' => Sentrasoft\Cas\Facades\Cas::class, );
将中间件添加到您的 Kernel.php
文件中,或者利用您自己的中间件
'cas.auth' => \Sentrasoft\Cas\Middleware\Authenticate::class, 'cas.guest' => \Sentrasoft\Cas\Middleware\RedirectIfAuthenticated::class,
现在发布配置文件 cas.php
$ php artisan vendor:publish --provider="Sentrasoft\Cas\CasServiceProvider" --tag="config"
在下面的 .env
中添加新的环境变量
CAS_HOSTNAME=cas.example.com
CAS_VALIDATION=https://cas.example.com/cas/p3/serviceValidate
CAS_VERSION=3.0
CAS_CONTROL_SESSIONS=true
CAS_LOGOUT_URL=https://cas.example.com/cas/logout
CAS_SERVICE_BASE_URL=http://127.0.0.1:8000
要查看更多配置,请参阅并阅读每个配置项的描述 config/cas.php
路由
认证
将用户重定向到提供者的认证页面。
Route::get('/cas/login', function() { return cas()->authenticate(); })->name('cas.login');
控制器和回调路由
您可以创建一个名为 Auth\CasController
的新控制器。
php artisan make:controller Auth\CasController
class CasController extends Controller { /** * Obtain the user information from CAS. * * @return Illuminate\Http\RedirectResponse */ public function callback() { // $username = Cas::getUser(); // Here you can store the returned information in a local User model on your database (or storage). // This is particularly usefull in case of profile construction with roles and other details // e.g. Auth::login($local_user); return redirect()->route('home'); } }
执行认证时,会调用回调 URL。在回调中,您可以处理用户并在数据库中创建本地条目。
Route::get('/cas/callback', 'Auth\CasController@callback')->name('cas.callback');
注销
注销 CAS 会话并将用户重定向。
Route::post('/cas/logout', [ 'middleware' => 'cas.auth', function() { cas()->logout(); // You can also add @param string $url in param[0] cas()->logout(url('/')); // Or add @param string $service in param[1] cas()->logout('', url('/')); }])->name('cas.logout');
cas.auth
中间件是可选的,但您需要处理用户尝试注销但没有 CAS 会话时出现的错误。
如果
.env
中的CAS_LOGOUT_REDIRECT
配置项已添加,则使用该配置的值。如果没有配置任何内容,则使用您指定的值。
如果您想使用 SLO (单一注销)(如果 CAS 服务器支持 SLO),则您的应用程序必须具有有效的 SSL,并且 CAS 服务器必须能够发送不验证 CsrfToken
的 HTTP POST /cas/logout
。因此,您必须更改 App\Http\Middleware\VerifyCsrfToken
文件并排除 /cas/logout
路由。
/** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ // '/cas/logout', ];
您可以通过尝试通过 cURL 发送 HTTP POST 来检查它是否正常工作。
curl -X POST https://yourapp.com/cas/logout
用法
获取用户
用于检索认证凭据。
不是 ID(整数),而是在 CAS 登录(用户名)表单中给出的。
$uid = Cas::user()->id;
获取用户属性
获取当前连接用户的属性。
foreach (Cas::user()->getAttributes() as $key => $value) { ... }
获取用户属性
通过键名检索特定属性。返回的属性可以是字符串或数组,具体取决于匹配项。
$value = Cas::user()->getAttribute('key');
帮助我们继续制作出色的产品。您不需要是开发者就可以支持我们的开源工作。如果您想获得个人支持,或者只是从帮助开源开发中感到温暖和舒适,捐款非常受欢迎。谢谢。
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。