agrodata / keycloak-guard
Pacote para utilização de permissões via autorização do keycloak
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.2
- illuminate/validation: ^9.19.0
- robsontenorio/laravel-keycloak-guard: ^1.4.2
README
<img src="https://img.shields.io/packagist/v/agrodata/keycloak-guard.svg" />
<img src="https://img.shields.io/packagist/dt/agrodata/keycloak-guard.svg" />
Keycloak Guard
Biblioteca responsável por realizar a autenticação e permissionamento do keycloak nos projetos laravel. Para a autenticação foi utilizado a biblioteca do Robson Tenorio (keycloak-guard), para autorização (permissionamento) foi feita uma extensão dessa biblioteca, onde é feita uma busca do permissionamento do usuário autenticado no keycloak.
Instalação
Instale o pacote através do composer com o seguinte comando:
composer require agrodata/keycloak-guard
Na sequencia adicione a seguinte linha no arquivo `
config/app.php`
<?php #config/app.php
'providers' => [
...
Agrodata\Keycloak\KeycloakGuardServiceProvider::class
]
No arquivo `
config/auth.phpadicione o guard
agrodata-keycloak`
:
<?php #config/auth.php
...
'guards' => [
'api' => [
'driver' => 'agrodata-keycloak',
'provider' => 'users'
]
...
],
Configuração
Para entender como configurar o permissionamento no keycloak, consultar o seguinte artigo: https://www.appsdeveloperblog.com/fine-grained-authorization-services-in-keycloak/
Configuração da autenticação
Para configurar a autenticação deverá utilizar a documentação da biblioteca pai: https://github.com/robsontenorio/laravel-keycloak-guard#configuration
Configuração da autorização
O configuração do permissionamento ficará em um arquivo de configuração separado, pois, é uma funcionalidade opcional.
<?php # config/agrodata-keycloak.php
return [
'enabled' => env('AGRODATA_KC_ENABLED', true),
'endpoint' => env('AGRODATA_KC_ENDPOINT'),
'client-id' => env('AGRODATA_KC_CLIENT_ID'),
'realm' => env('AGRODATA_KC_REALM'),
'concat-resource-scope' => env('AGRODATA_KC_CONCAT_RESOURCE_SCOPE', true),
];
">
. Resultará em string de permissões: ```book.read```, ```book.write```<br>
Recursos/Serviços
Proteção de Recursos
Após a configuração da biblioteca, as permissões do usuários serão registrados no `
Gate`
do Laravel, portanto, será possível
proteger os recursos da api com tais permissões. Um exemplo protegendo as rotas:
<?php #routes\api.php
Route::middleware('can:book.read')->get('/book/list');
Route::middleware('can:book.write')->post('/book/store', 'Gravação do recurso');
Serviço
A biblioteca utiliza a seguinte classe de serviço para realizar a busca das permissões e recursos no keycloak após a autenticação. Porém, caso deseje utilizar o serviço em qualquer outro lugar do sistema não há problemas. Exemplos:
<?php
/**
* Autenticação | Buscar Bearer token do usuário
*/
$bearerToken = (new \Agrodata\Keycloak\KeycloakAuthService($username, $passwrd))->auth($clientSecret)
/**
* Instanciar Serviço
*
* Recebe token por parametro. Caso nulo, busca em cache o token do usuário autenticddo
*/
$kcService = new Agrodata\Keycloak\KeycloakService($bearerToken = null);
/**
* Buscar permissões
*/
$permissions = $kcService->getOpenIdPermissions(); #busca permissões do token informado na api do keycloak
ou
$permissions = array_keys(Gate::abilities()) #busca permissões de cache registrados após autenticação
/**
* Criar subgrupo no keycloak
*/
$kcService->createSubGroup('Novo subgrupo 1', 'Grupo A');