sentrasoft/laravel-cas

Apereo CAS 认证用于 Laravel

v1.3.2 2019-10-11 03:34 UTC

This package is auto-updated.

Last update: 2024-09-16 00:04:35 UTC


README

Donate Latest Stable Version Total Downloads Monthly Downloads Latest Unstable Version License

轻松实现 Laravel 的 CAS 认证

安装

通过 Composer

$ composer require sentrasoft/laravel-cas

通过编辑 composer.json

"require": {
	"sentrasoft/laravel-cas": "dev-master"
}

接下来,从终端更新 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_LOGOUT_URL=https://cas.example.com/cas/logout

要查看更多配置,请查看每个配置项的描述 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 服务器必须能够发送不验证 CsrfTokenHTTP POST /cas/logout。因此,您必须更改 App\Http\Middleware\VerifyCsrfToken 文件并排除 /cas/logout 路由。

/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
protected $except = [
    //

    '/cas/logout',
];

您可以通过尝试发送一个 HTTP POST 通过 cURL 来检查它是否正常工作。

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');

支持我们

Donate

帮助我们继续制作出色的产品。您不需要是开发者就可以支持我们的开源工作。如果您想获得个人支持,或者只是从帮助开源开发中感到温暖和舒适,捐款非常受欢迎。谢谢。

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件