为 Laravel 7.x 或 8.x 添加 CAS 支持

维护者

详细信息

github.com/hanovate/cas

源代码

v3.1.3 2021-01-05 02:26 UTC

README

这是一个基于 subfission/cas 并更新为利用 Laravel 会话管理方法的分支。

有关更多详细信息,请参阅 subfission/cas 文档。这包括安装和用法说明。

Laravel 7.x 和 8.x 的简单 CAS 认证。

截至 2020-04-15 已在 Laravel 7.6.1 上测试,截至 2020-12-10 已在 Laravel 8.18.1 上测试

安装

1. 在项目根目录中安装此包

$ composer require hanovate/cas

2. 在你的 ./app/Http/Kernel.php 中添加以下两行

    protected $routeMiddleware = [
        ...
        'cas.auth' => \Hanovate\Cas\Middleware\CASAuth::class,
        'cas.guest' => \Hanovate\Cas\Middleware\RedirectCASAuthenticated::class,
        ...
    }

3. 在你的 ./.env 中添加以下环境参数

CAS_HOSTNAME=login.myschool.edu
CAS_REAL_HOSTS=login.myschool.edu
CAS_LOGOUT_URL=https://login.myschool.edu/cas/logout
CAS_REDIRECT_PATH=https://myapp.myschool.edu/main-for-logged-in-user
CAS_CONTROL_SESSIONS=false
CAS_ENABLE_SAML=true
CAS_VERSION=3.0

CAS_DEBUG, CAS_VERBOSE_ERRORS 可以设置为 true 以显示更详细的错误信息。

CAS_VERSION 应设置为 CAS 协议版本,而不是 CAS 服务器版本。

CAS_REDIRECT_PATH 是用户在 CAS 服务器上认证后默认要去的地址。

4. 运行 'artisan vendor:publish' 命令并选择 ''cas''

$ ./artisan vendor:publish --tag=cas
Copied File [/vendor/hanovate/cas/src/config/config.php] To [/config/cas.php]
Publishing complete.

用法

为了在 ./app/Http/Providers/AuthServiceProvider.php 中定义权限,添加以下行

...
use Illuminate\Support\Facades\Auth;
use App\Auth\Guards\CasGuard;
...
    
    ...
    public function boot()
    {
        $this->registerPolicies();

        Auth::extend('cas',function($app, $name, array $config) {
            return new CasGuard();
        });

        Gate::define('request',function($user) {
            return true;
        });
    }

...

在你的路由文件(例如 ./routes/web.php)中,可以使用 web 中间件 cas.auth 进行简单认证。

...

Route::get('/',function() {
    if (cas()->isAuthenticated()) {
        echo 'authenticated<br>'; 
        echo 'click here to go to <a href="'.route('main.home').'">home</a><br>';
        echo 'user: '.cas()->user().'<br>';
        echo '<a href="'.route('main.logout').'">logout</a>';
    } else {
        echo 'not authenticated<br>';
        echo '<a href="'.route('main.login').'">login</a>';
    }
});


Route::get('/login',function() {
    cas()->authenticate();
})->name('main.login');


Route::middleware(['cas.auth'])->group(function() {
    Route::get('/main', function() {
        echo 'This is a main home page<br>';
        echo 'user: '.cas()->user().'<br>';
        echo '<a href="'.route('main.logout').'">logout</a>';
    })->name('main.home');

    Route::get('/auth/logout',function() {
        return cas()->logout(null,'https://auth1.unm.edu/');
    })->name('main.logout');
});
...

许可证

MIT 许可证 (MIT)

版权所有 (c) 2017 Zach Jetson

特此授予任何人免费获取此软件及其相关文档文件(“软件”)副本的权利,用于在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,以及允许向提供软件的人员做上述事项,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式引起的,无论是由于软件或其使用或其他方式。