wg-hyve / cloak-port
守卫;检查JWT与不同守卫类型;默认keycloak & passport
Requires
- php: ^8.2
- firebase/php-jwt: ^6.8
- laravel/passport: ^12.0
- wg-hyve/keycloak-laravel-guard: ^0.8.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.7
- guzzlehttp/promises: ^2.0
- orchestra/testbench: ^8.5
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2024-09-23 09:11:55 UTC
README
需求
此包通过JWT证明Keycloak、Passport客户端和Passport用户的授权实例。它需要跟踪三种不同的授权机制
- Keycloak
- Passport用户
- Passport客户端
Keycloak
https://github.com/wg-hyve/laravel-keycloak-guard/tree/wg
Passport客户端
常规客户端凭证授权
Passport用户
Passport用户是带有确定用户的客户端登录。(密码授权)
安装
要求wg-hyve/cloak-port并在您的composer.json
中添加GitHub仓库。
composer require wg-hyve/cloak-port
如果您想覆盖它,请发布配置。php artisan vendor:publish --tag=cloak-port-config
使用
安装Passport和Keycloak包。它应该能够直接使用。您仍然可以通过自己的GuardType
扩展行为。请确保您实现了GuardTypeContract
。如果您添加了新的GuardType
,您可以添加自己的守卫。
在认证配置和路由中定义CloakPort
在您的auth.php
文件中
<?php return [ // ... 'guards' => [ 'cloak_n_dagger' => [ 'driver' => 'keycloak_passport', 'provider' => 'users', ], // ... ], // ... ];
在您的routes/api.php
中
<?php use App\Http\Controllers\AnyController; use Illuminate\Support\Facades\Route; Route::prefix('v1')->middleware(['auth:cloak_n_dagger'])->group(function () { Route::get('/any-route', [AnyController::class, 'index']); });
配置
keycloak_key_identifier
如果Bearer token负载中的任何密钥与keycloak_key_identifier
部分匹配,则识别keycloak JWT。
guards
已加载的守卫。顺序方向影响守卫的加载顺序。由于它们是最严格的,Keycloak和Passport用户守卫将始终具有最高优先级。
factory
如果需要,请用您自己的工厂替换GuardType
。请记住,您仍然需要为keycloak
、passport_user
和passport_client
提供覆盖率。
扩展
config
return [ // ... 'guards' => [ 'my_new_guard', 'passport_user', 'passport_client', 'keycloak', 'default' ], 'factory' => My\Package\MyGuardType::class, ];
GuardType
<?php namespace My\Package; use CloakPort\GuardContract; use CloakPort\GuardTypeContract; use CloakPort\TokenGuard as DefaultGuard; use My\Package\TokenGuard as MyGuard; enum GuardType implements GuardTypeContract { case KEYCLOAK; case PASSPORT_CLIENT; case PASSPORT_USER; case MY_GUARD; case DEFAULT; public static function load(string $backend): self { return match(strtolower($backend)) { 'my_guard' => GuardType::MY_GUARD, // ... default => GuardType::DEFAULT }; } public function loadFrom(array $config): GuardContract { return match ($this) { self::MY_GUARD => MyGuard::load($config), // ... self::DEFAULT => DefaultGuard::load($config) }; } }
TokenGuard
如有必要,覆盖任何其他公开方法,如user
。在您的守卫中提供一个setConfig方法和一个局部的 $config 属性。
<?php namespace My\Package; use CloakPort\GuardContract; use CloakPort\TokenGuard as ParentTokenGuard; use Illuminate\Contracts\Auth\Guard; class TokenGuard extends ParentTokenGuard implements Guard, GuardContract { protected array $config = []; public static function load(array $config): self { return new self(); } public function setConfig(array $config): self { $this->config = $config; return $this; } public function validate(array $credentials = []) { // any magic to valid your JWT return $this->check(); } public function check() { return false; } }