sinema / gate-guardian
守卫;检查JWT与不同守卫类型的匹配;默认为Zitadel
0.1.2
2023-03-22 18:36 UTC
Requires
- php: ^8.2.0
- firebase/php-jwt: ^6.4
- laravel/framework: ^10.0
- sinema/json-api-error-laravel: ^0.2
README
要求
此包证明了一个JWT Zitadel用户授权的实例。确保您将Zitadel JWT配置为访问令牌并传递角色。它需要跟踪不同的授权机制
- Zitadel (PKCE)
- 自定义守卫
安装
需要sinema/gate-guardian并在您的composer.json
中添加GitHub仓库。
{ "require": { "php": "^8.2.0", "sinema/gate-guardian": "dev-main", }, "repositories": [ { "type": "vcs", "url": "https://github.com/SineMah/gate-guardian.git" } ], "minimum-stability": "dev", "prefer-stable": true }
composer install
如果您想覆盖它,则发布配置。php artisan vendor:publish --tag=cloak-port-config
使用
您仍然可以使用自己的GuardType
扩展行为。确保您实现了GuardTypeContract
。如果您添加了新的GuardType
,则可以添加自己的守卫。
在认证配置和路由中定义CloakPort
在您的auth.php
文件中
<?php return [ // ... 'guards' => [ 'gate_keeper' => [ 'driver' => 'gate_guardian', 'provider' => 'users', ], // ... ], // ... ];
在您的routes/api.php
中
<?php use App\Http\Controllers\AnyController; use Illuminate\Support\Facades\Route; Route::prefix('v1')->middleware(['auth:gate_keeper'])->group(function () { Route::get('/any-route', [AnyController::class, 'index']); });
配置
key_identifier
如果key_identifier
部分的任何密钥与您的Bearer令牌负载匹配,则识别Keycloak JWT。
guards
已加载的守卫。顺序方向影响您守卫的加载顺序。Keycloak和Passport用户守卫将始终具有最高优先级,因为它们是最严格的。
factory
如有必要,用您自己的工厂替换GuardType
。请注意,您仍然需要为keycloak
、passport_user
和passport_client
提供覆盖。
扩展
config
return [ // ... 'guards' => [ 'my_new_guard', 'zitadel', '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 ZITADEL; 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
。
<?php namespace My\Package; use CloakPort\GuardContract; use CloakPort\TokenGuard as ParentTokenGuard; use Illuminate\Contracts\Auth\Guard; class TokenGuard extends ParentTokenGuard implements Guard, GuardContract { public static function load(array $config): self { return new self(); } public function validate(array $credentials = []) { // any magic to valid your JWT return $this->check(); } public function check() { return false; } }