corbosman / laravel-passport-claims
向Laravel Passport JWT令牌添加声明
Requires
- illuminate/support: ^9.0|^10.0|^11.0
- laravel/passport: ^10.3|^11.2|^12.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^7.0|^8.0|^9.0
- phpseclib/phpseclib: ^3.0
- phpseclib/phpseclib2_compat: ^1.0
- phpunit/phpunit: ^9.5.1|^10.5
README
此包允许您向Laravel Passport JWT令牌添加声明。如果您有任何问题或评论,请创建一个问题。
安装
此包仅支持Laravel 9和10。您可以尝试使用此包的旧版本,但不提供支持。
通过Composer
composer require corbosman/laravel-passport-claims
用法
此包通过类管道发送AccessToken类以收集所有声明,类似于laravel中间件的工作方式。每个类都会向令牌添加一个声明。对于您想要添加的每个声明,您需要创建一个类似于以下示例的类。当然,您也可以在单个类中添加多个声明。
您可以使用Artisan命令为您生成一个类。只需提供从应用文件夹根目录的路径。以下示例将创建一个类app/Claims/CustomClaim.php
php artisan claim:generate Claims/CustomClaim
<?php namespace App\Claims; use CorBosman\Passport\AccessToken; // extends Laravel\Passport\Bridge\AccessToken class CustomClaim { public function handle(AccessToken $token, $next) { $token->addClaim('my-claim', 'my custom claim data'); return $next($token); } }
由于Passport AccessToken通过管道发送,因此您可以访问AccessToken类上的方法。如果您想从令牌中获取信息,这非常有用。例如,根据令牌用户标识查找用户数据。您可以查看AccessToken类以查看您可以使用的所有方法。
<?php namespace App\Claims; use App\User; use CorBosman\Passport\AccessToken; // extends Laravel\Passport\Bridge\AccessToken class CustomClaim { public function handle(AccessToken $token, $next) { $user = User::find($token->getUserIdentifier()); $token->addClaim('email', $user->email); return $next($token); } }
配置
要告诉此包您要添加哪些声明,您需要发布配置文件并添加所有类列表。在安装此包后,运行以下命令来发布配置文件。
php artisan vendor:publish --provider="CorBosman\Passport\ServiceProvider"
配置文件看起来像这样。
<?php return [ /* |-------------------------------------------------------------------------- | JWT Claim Classes |-------------------------------------------------------------------------- | | Here you can add an array of classes that will each be called to add | claims to the passport JWT token. See the readme for the interface that | these classes should adhere to. | */ 'claims' => [ App\Claims\MyCustomClaim::class, App\Claims\MyOtherCustomClaim::class ] ];
中间件
您可以在路由上设置一个中间件来检查特定声明的存在。将中间件添加到您的\App\Http\Kernel.php类中
protected $routeMiddleware = [ 'claim' => \CorBosman\Passport\Http\Middleware\CheckForClaim::class, ];
然后将此中间件分配给路由。通常,您还会添加一个检查有效令牌的passport中间件。
Route::middleware(['client', 'claim:my-claim'])->get('my-protected-route', function () { return 'protected by claim'; });
您可以检查声明是否与特定值匹配。
Route::middleware(['client', 'claim:my-claim,foobar'])->get('my-protected-route', function () { return 'protected by claim with foobar as its value'; });
您还可以检查声明是否与多个值中的特定值匹配,只需使用|分隔值即可。
Route::middleware(['client', 'claim:my-claim,foo|bar'])->get('my-protected-route', function () { return 'protected by claim with foo or bar as its value'; });
格式化程序
此包还允许您配置自定义格式化程序。格式化程序可以用于修改现有声明。您甚至可以使用它们来添加声明。选择自定义格式化程序的一个常见原因是将JWT中的DateTime字段从浮点数更改为整数。由于库中的更改,JWT现在使用浮点值发行,这破坏了与其他几乎所有JWT库的兼容性。如果您遇到这个问题,只需将以下内容添加到passport-claims.php配置文件中即可
'formatters' => [ \Lcobucci\JWT\Encoding\UnifyAudience::class, \Lcobucci\JWT\Encoding\UnixTimestampDates::class, ]
这会将微秒格式化程序替换为旧的Unix时间戳格式化程序。当然,您也可以添加任何其他自定义声明格式化程序。
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅contributing.md。
安全
如果您发现任何安全相关的问题,请通过电子邮件发送给作者,而不是使用问题跟踪器。
鸣谢
许可证
有关更多信息,请参阅许可证文件。