tasikmalayakab / laravel-cas
为 Laravel 的 Apereo CAS 身份验证
Requires
- php: >=5.5.0
- apereo/phpcas: ~1.3.4
- illuminate/contracts: 5.x
- illuminate/http: 5.x
- illuminate/support: 5.x
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2024-09-30 19:08:34 UTC
README
这是一个 Laravel 扩展包,旨在将基于 Laravel 的 Web 应用程序作为 Tasikmalaya 县的 SSO 客户端进行集成。请按照 README.md 中的说明进行操作。
安装
选项 1:通过 composer
命令
$ composer require tasikmalayakab/laravel-cas
选项 2:编辑 composer.json
文件
"require": {
"tasikmalayakab/laravel-cas": "dev-master"
}
然后,通过终端执行 composer update 命令
$ composer update
配置
更新 composer 后,打开 config/app.php
文件,并将 ServiceProvider 添加到 'providers' 列表中。
'providers' => array(
.....
Kabupaten\Tasikmalaya\Cas\CasServiceProvider::class,
);
还要将它们添加到同一文件 config/app.php
中的 'aliases' 配置。
'aliases' => array(
.....
'Cas' => Kabupaten\Tasikmalaya\Cas\Facades\Cas::class,
);
您可以在 Kernel.php
文件中添加内置的 middleware 或您自己创建的 middleware。
protected $routeMiddleware = [
.....
'cas.auth' => \Kabupaten\Tasikmalaya\Cas\Middleware\Authenticate::class,
'cas.guest' => \Kabupaten\Tasikmalaya\Cas\Middleware\RedirectIfAuthenticated::class,
];
现在您需要通过以下终端命令发布配置文件 config/cas.php
:
$ php artisan vendor:publish --provider="Kabupaten\Tasikmalaya\Cas\CasServiceProvider" --tag="config"
然后,将默认 CAS 配置变量添加到 .env
文件中。
CAS_HOSTNAME=sso.tasikmalayakab.go.id
CAS_VALIDATION=https://sso.tasikmalayakab.go.id/cas/p3/serviceValidate
CAS_VERSION=3.0
CAS_LOGOUT_URL=https://sso.tasikmalayakab.go.id/cas/logout
要查看更详细的配置,请参阅 config/cas.php 文件中每个配置项的描述。
路由
身份验证过程
将用户重定向到 Tasikmalaya 县的 SSO 身份验证页面。
Route::get('/cas/login', function() {
return cas()->authenticate();
})->name('cas.login');
您的 Web 应用程序必须首先从 Dinas Komunikasi dan Informatika Kabupaten Tasikmalaya 获得服务授权。如果没有获得授权,您的 Web 应用程序将无法使用此服务。
控制器 和 回调路由
您可以通过创建名为 CasController
的新控制器来处理用户信息(在完成 SSO 登录后)并在本地数据库中处理用户。
php artisan make:controller Auth\CasController
class CasController extends Controller
{
/**
* Mendapatkan informasi pengguna dari server CAS.
*
* @return Illuminate\Http\RedirectResponse
*/
public function callback()
{
// $id = Cas::user()->id;
// Di sini Anda dapat menyimpan informasi pengguna
// yang diberikan oleh server CAS dalam model pengguna
// lokal di basis data lokal aplikasi Anda.
// Ini sangat berguna dalam kasus konstruksi profil pengguna
// dengan peran dan detail lainnya
// mis. Auth::login($pengguna_lokal);
return redirect()->route('home');
}
}
在身份验证过程中,将调用 回调 URL。在回调调用中,您可以处理用户或将其注册到本地应用程序数据库中(如果用户 ID 不存在于本地数据库中)。
Route::get('/cas/callback', 'Auth\CasController@callback')->name('cas.callback');
注销或 SLO (单一注销)
从 CAS 会话注销并将用户重定向到特定页面。
Route::post('/cas/logout', [ 'middleware' => 'cas.auth', function() {
cas()->logout();
// Anda juga dapat menambahkan @param string $url di parameter[0]
cas()->logout(url('/'));
// Or menambahkan @param string $service di parameter[1]
cas()->logout('', url('/'));
}])->name('cas.logout');
cas.auth
中间件是可选的,但您的 Web 应用程序必须能够处理用户在尝试注销时没有 CAS 会话时发生的错误。
如果
.env
中的CAS_LOGOUT_REDIRECT
配置变量被添加,则其值将从该配置中获取。如果没有添加,则使用您指定的值。
如果您想使用 SLO (单一注销) 模式(如果 CAS 服务器支持 SLO),则您的 Web 应用程序必须具有有效的 SSL,并且 CAS 服务器必须能够发送不带 CsrfToken
验证的 HTTP POST /cas/logout
。因此,您必须更改 App\Http\Middleware\VerifyCsrfToken
文件并排除 route /cas/logout
。
/**
* Daftar URI yang dikecualikan dari verifikasi CSRF.
*
* @var array
*/
protected $except = [
//
'/cas/logout',
];
您可以通过通过 cURL 发送 HTTP POST 来检查它是否正常工作。
curl -X POST https://yourapp.com/cas/logout
基本使用
获取用户 ID
以获取认证凭证。
不是 ID(整数类型),而是用户在 CAS 登录表单中提供的值(可以是用户名或电子邮件)。
$id = Cas::user()->id;
获取用户属性
以获取 CAS 会话中可用的用户属性列表。
foreach (Cas::user()->getAttributes() as $key => $value) {
...
}
根据属性键获取用户属性值
以获取特定属性。提供的属性类型可以是 string 或根据数据类型和属性值匹配的 array。
$value = Cas::user()->getAttribute('key');
使用许可
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。