uisits / laravel-oidc
Laravel Socialite 的 Shibboleth OIDC 驱动程序
v10.0.3
2024-01-22 20:22 UTC
Requires
- illuminate/filesystem: ^9.0|^10.0
- illuminate/support: ^9.0|^10.0
- laravel/socialite: ^5.10
Requires (Dev)
- laravel/pint: ^1.10
- mockery/mockery: ^1.5
- orchestra/testbench: ^7.24|^8.5
- pestphp/pest: ^1.0|^2.6
- pestphp/pest-plugin-laravel: ^1.0|^2.0
- phpunit/phpunit: ^9.0|^10.1
README
本扩展包扩展了 Laravel 的原生包 socialite,用于通过 Shibboleth 进行身份验证和授权。
用法
- 安装包:
composer require uisits/laravel-oidc
- 可选:将服务提供者添加到
config/app.php
文件。UisIts/Oidc/ShibbolethServiceProvider::class
- 重要: 安装包:
php artisan shibboleth:install
- 在 .env 文件中设置环境变量(检查
config/shibboleth.php
文件)
迁移数据库
运行 php artisan migrate
注意
对于授权,在 .env 文件中设置
APP_AD_AUTHORIZE_GROUP
。您可以使用 gates 或直接使用用户模型来检查用户是否为管理员。例如
In AuthServiceProvider: Gate::define('admin', function (User $user) { return $user->hasRole('admin'); }); To check if user is admin you can either use: User::find()->hasRole OR Gate::allows('admin')
使用 SAML 身份验证
- 设置 SAML 环境变量
- 在
config/shibboleth.php
中将类型属性设置为 saml
使用 OIDC 身份验证
- 设置 OIDC 环境变量
- 在
config/shibboleth.php
中将类型属性设置为 oidc
设置身份验证路由
在 routes/web.php
文件中设置身份验证路由
use UisIts\Oidc\Http\Controllers\AuthController; Route::name('login')->get('login', [AuthController::class, 'login']); Route::name('callback')->get('/auth/callback', [AuthController::class, 'callback']); Route::name('logout')->get('/logout', [AuthController::class, 'logout']);
授权
- 在 .env 文件中定义 ad 组名
- 您可以通过覆盖
config/shibboleth.php
文件中的redirect_to
属性来配置重定向路由,以便在成功身份验证后使用。 - 在
config/shibboleth.php
文件中的authorization
属性下设置组的名称'authorization' => env('APP_AD_AUTHORIZE_GROUP', null)
- 将
HasRoles
特性添加到Users
模型use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; }
- 在您的
app/AuthServiceProvider.php
文件中,您现在可以在应用程序的任何位置使用以下逻辑分配 Gates 或检查用户是否为管理员# In AuthServiceProvider Gate::define('admin', function (User $user) { return $user->hasRole('admin'); }); # OR $user->hasRole('admin');
您可以使用 Spatie Permission 包 扩展角色和权限功能,以添加新的角色或权限
令牌自省
对于使用 OIDC 的令牌自省,请将以下中间件添加到 app/Http/Kernel.php
文件中
在 alias
属性下
'introspect' => \UisIts\Oidc\Http\Middleware\Introspect::class,
现在您可以在受保护的路由上使用此中间件
use UisIts\Oidc\Http\Middleware\Introspect; Route::middleware(['introspect'])->get('/introspect', function (Request $request) { dump($request->bearerToken()); dd(Introspect::getUserFromToken($request->bearerToken())); })->name('introspect');
注意:以下是从令牌获取用户时收到的响应
Introspect::getUserFromToken($request->bearerToken()); array:8 [▼ // routes/api.php:24 "sub" => "xyz@abc.org" "uisedu_is_member_of" => array:42 [▶] "uisedu_uin" => "123456789" "preferred_username" => "xyz" "given_name" => "John" "preferred_display_name" => "Doe, John" "family_name" => "Doe" "email" => "xyz@abc.org" ];
代码风格
您可以使用 Laravel pint 自动修复代码风格。 ./vendor/bin/pint
测试
您可以使用 pest 运行包的测试。 ./vendor/bin/pest
问题和关注点
请在 GitHub 仓库中打开一个带有详细描述和日志(如果有的话)的问题。
如果对安全有顾虑,请给 UIS ITS ADDS Team 发送电子邮件。