unvurn / reauth
Reauth - Laravel 的另一个身份验证模块
Requires
- php: ^8.2
- ext-json: *
- laravel/framework: ^11.0
- symfony/console: ^7.0
Requires (Dev)
- mockery/mockery: ^1.6
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5
README
此包为基于 Laravel 的 API 服务器提供基于令牌的身份验证能力。
安装
$ composer require unvurn/reauth
并将生成迁移文件。
$ php artisan vendor:publish --tag=reauth-migrations
配置
守卫
# config/auth.php return [ 'guard' => 'bearer', 'guards' => [ # this 'bearer' entry is implied within reauth package itself. # you don't have to duplicate it. 'bearer' => [ 'driver' => 'bearer', 'pipelines' => [ [ 'resolver' => OpaqueAccessTokenResolver::class, 'users' => AccessTokenUserProvider::class ] ] ], 'json' => [ 'driver' => 'json', 'pipelines' => [ 'custom_id' => [ 'resolver' => function ($value, &$decoded) { $decoded = $value; return [ 'custom_id' => $value ]; }, // 'users': can be omitted ] ], ] ] ];
Reauth 包提供了一种新的 Guard
形式。守卫有两个属性 - 'driver' 和 'pipelines'。
'Driver' 属性为每个 HTTP 请求分配令牌来源。'Bearer' 驱动要求每个 HTTP 请求的 "Authorization" 标头中携带令牌。这意味着每个请求应包含类似这样的头信息:
Authorization: Bearer (token string)
'Json' 驱动要求 JSON 请求体包含指定的属性,例如上面示例中的 "custom_id"。
管道
守卫有一个或多个管道,用于将身份验证结果从令牌传递到后续过程(例如 Controller)。每个管道按顺序处理,当找到认证用户时结束(后续管道被丢弃)。
解析器
解析器的作用是解码原始令牌字符串(如果它是 "不透明" 令牌则直接传递),并将其安排为 UserProvider::retrieveByCredentials()
的 "credentials"。
有两种方式配置解析器的工作方式。第一种是使用实现 TokenResolverInterface
的类实例,如下所示。
'pipelines' => [ [ 'resolver' => OpaqueAccessTokenResolver::class, // ... ] ]
此类 OpaqueAccessTokenResolver
实现 TokenResolverInterface
即 credentialsFromToken
方法。
另一种是匿名函数,如下所示
'pipelines' => [ [ 'resolver' => function ($value, &$decoded) { $decoded = $value; return [ 'custom_id' => $value ]; }, ] ]
此匿名函数的签名与 TokenResolverInterface::credentialsFromToken()
类似。
警告
如果您不关心后续过程(例如 Controller)中的解码令牌,可以省略并忽略第二个参数,如下所示,尽管这不被推荐。
'resolver' => function ($value) { return [ 'custom_id' => $value ]; },
尽管如此,这并不推荐。
解析器适用于以下过程
- 如果输入令牌具有特定的编码、加密、格式等,解析器可以将原始令牌字符串分解成适当的结构。
- (如有必要) 检查令牌是否存在 - 过期限制、令牌所有者、源地址等。
- 将令牌信息安排为 "credentials" - 供
UserProvider
使用。
用户(= UserProvider)
用户(UserProvider
)的作用是查找与先前过程中推导出的凭证匹配的用户。与 Laravel Auth 中定义的普通 UserProvider
相似。"Reauth" 包通过使用用户相关模型类提供额外的功能。
- AccessTokenUserProvider
- AttributionalUserProvider
- OpenIdUserProvider