agrodata/keycloak-guard

用于通过keycloak授权使用权限的包

1.10 2024-03-13 18:01 UTC

This package is auto-updated.

Last update: 2024-09-13 19:12:51 UTC


README

logo

&nbsp;<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

负责在Laravel项目中实现Keycloak的认证和授权的库。认证使用了Robson Tenorio的库(keycloak-guard),对于授权(权限管理),则扩展了这个库,实现了在keycloak中搜索认证用户权限的功能。

安装

使用以下命令通过composer安装包

composer require agrodata/keycloak-guard

然后,在`config/app.php`文件中添加以下行

<?php #config/app.php

'providers' => [
    ...
    Agrodata\Keycloak\KeycloakGuardServiceProvider::class
]

在`config/auth.php`文件中添加`agrodata-keycloak`作为guard

<?php #config/auth.php
...
'guards' => [
    'api' => [
        'driver' => 'agrodata-keycloak',
        'provider' => 'users'
    ]
    ...
],

配置

要了解如何在keycloak中配置权限,请参考以下文章:https://www.appsdeveloperblog.com/fine-grained-authorization-services-in-keycloak/

认证配置

要配置认证,应使用父库的文档: https://github.com/robsontenorio/laravel-keycloak-guard#configuration

授权配置

权限配置将保存在一个独立的配置文件中,因为这是一个可选的功能。

<?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>
    

资源/服务

资源保护

配置库后,用户权限将注册在Laravel的`Gate`中,因此可以使用这些权限来保护API资源。以下是一个保护路由的示例

<?php #routes\api.php
    Route::middleware('can:book.read')->get('/book/list');
    Route::middleware('can:book.write')->post('/book/store', 'Gravação do recurso');

服务

该库使用以下服务类在认证后从keycloak中搜索权限和资源。但是,如果您想在系统的任何其他地方使用此服务,也没有问题。示例

<?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');