agrodata / cognito-guard
用于由 Amazon AWS Cognito 签发的 JSON Web Tokens 的 Laravel 身份验证保护器
Requires
- php: ^8.3
- ext-json: *
- firebase/php-jwt: *
- illuminate/auth: *
- illuminate/contracts: *
- illuminate/http: *
- illuminate/support: *
Requires (Dev)
- orchestra/testbench: ^6.0
- php-coveralls/php-coveralls: ^2.4
- phpseclib/phpseclib: ~3.0
- phpunit/phpunit: ^9.0
README
用于使用 Amazon Cognito 进行 JWT 身份验证和 Amazon Verified Permissions 进行权限管理的库。
安装
通过 composer 安装包
composer require agrodata/cognito-guard
发布迁移文件 add_cognito_uuid_to_users_table.php.stub,配置文件 config/cognito.php 和 config/verified-permission.php
php artisan vendor:publish --provider="Agrodata\CognitoGuard\CognitoServiceProvider"
执行命令以创建新的迁移。这将向 "users" 表添加 [cognito_uuid] 字段
php artisan migrate
在 .env 中添加 Cognito 用户池的环境变量
AWS_COGNITO_REGION=us-east-2
AWS_COGNITO_USER_POOL_ID=us-east-2_PxDu3D4G4
对于使用 Verified Permissions 的权限管理,需要添加以下变量
AVP_REGION=
AVP_NAMESPACE=
AVP_POLICY_STORE_ID=
您还需要修改项目中的 [config/auth.php] 文件中的 "auth" 驱动程序;
// config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'cognito', // aqui!!!!
'provider' => 'users',
],
],
最后,根据您配置的 Cognito 用户池所需属性,您可能还需要调整 published config/cognito.php 文件中的单点登录设置
// config/cognito.php
'leeway' => 0,
'input_key' => null,
'append_decoded_token' => false,
'load_user_from_database' => true,
'user_provider_custom_retrieve_method' => null
Verified Permission
Amazon Verified Permission 必须集成到项目中使用的 Cognito 用户池。将有两个中间件来验证 verifiedPermission 的权限
中间件
can
将查询分配给 Cognito 的 "组" 的所有 verifiedPermission 权限
- CognitoUser->Group->VerifiedPermission
所有 权限都将被检索并添加到本地应用程序的缓存中。
后续的所有查询都将查询缓存中的列表。
如果向组分配了新的权限,则用户需要重新登录以重新注册缓存中的新权限。
Route::middleware('can:admin.user:read')
permission
每个权限将单独在 VerifiedPermission API 中进行验证。
这种方法比前一种方法稍微低效一些,并且会在 AWS(因为 VerifiedPermission 向其 API 中的查询收费)中更昂贵。
这种方法的优点是权限总是实时验证,无需在 Cognito 中重新登录。
Route::middleware('permission:admin.user:read')