agrodata / cognito-guard
A laravel auth guard for JSON Web Tokens issued by Amazon AWS Cognito
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
Biblioteca para usar autenticação com token JWT com Amazon Cognito e Permissionamento com Amazon Verified Permissions.
Installation
Instalação do pacote via composer
composer require agrodata/cognito-guard
Publique o arquivo de migration os arquivod de configuração config/cognito.php e config/verified-permission.php:
php artisan vendor:publish --provider="Agrodata\CognitoGuard\CognitoServiceProvider"
Execute o comando para criar a nova migration. Isso irá adicionar o campo [cognito_uuid] na tabela "users"
php artisan migrate
Adicione as variáveis de ambiente do 'User Pool' do Cognito no seu .env
AWS_COGNITO_REGION=us-east-2
AWS_COGNITO_USER_POOL_ID=us-east-2_PxDu3D4G4
Para o permissionamento com Verified Permissions, deverá adicionar as seguintes variáveis:
AVP_REGION=
AVP_NAMESPACE=
AVP_POLICY_STORE_ID=
Você também precisará alterar o driver "auth" no arquivo [config/auth.php] do seu projeto;
// config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'cognito', // aqui!!!!
'provider' => 'users',
],
],
Finally, depending on how you configured your Cognito User Pool's required attributes you may also want to make adjustments to your Single Sign-On settings in the published config/cognito.php file
// 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
O amazon verified permission deve estar integrado ao Cognito UserPool que está sendo utilizado no projeto. Haverá 2 middlewares para validar as permissões do verifiedPermission:
Middlewares
can:
Serão consultadas todas as permissões no verifiedPermission atribuidas ao "grupo" do cognito ao qual o usuário pertence:
- CognitoUser->Group->VerifiedPermission
Todas as permissões serão buscadas e adicionadas em Cache na aplicação local.
Todas as consultas posteriores serão consultadas na listagem em cache.
Caso uma nova permissão seja atribuida à um grupo, o usuário precisará re-logar para re-cadastrar as novas permissões em cache.
Route::middleware('can:admin.user:read')
permission:
Cada permissão será verifica individualmente na API do VerifiedPermission.
Esse método é um pouco menos performatico que o anterior e custará mais caro na AWS (visto que o VerifiedPermission cobra por consulta nas suas Api's).
A vantagem dessa abordagem é que as permissões sempre serão validadas em tempo real, sem a necessidade de re-logar +no Cognito.
Route::middleware('permission:admin.user:read')