cometa / key-cloack
与keycloak的简单连接,身份验证/授权
1.0.2
2022-11-25 12:14 UTC
Requires
- php: ^8.0
- firebase/php-jwt: ^6.3
This package is not auto-updated.
Last update: 2024-09-27 20:55:55 UTC
README
Cometa KeyCloak
一个简单的“身份验证/授权”库,用于在sso中利用openid-connect协议使用keycloak。
授权功能适用于基于范围或基于资源的权限,了解更多信息请访问KeyCloak授权服务
在LARAVEL中安装
-
使用composer安装:
composer require cometa/key-cloack
-
发布配置文件:在终端中执行以下代码
php artisan vendor:publish --tag=config
,这将使Laravel在config/中创建配置文件。如果这没有按预期进行,将需要手动完成。只需将_vendor/cometa-keycloack/config/keyCloack.php复制到config/中。 -
注册中间件:在app/Http/Kenel.php中向数组$routeMiddleware添加两个项目
$routerMiddleware = [ 'auth' => Cometa\KeyCloack\Middlewares\Authenticate::class, 'permission' => Cometa\KeyCloack\Middlewares\Authorization::class ... ];
- 配置config/auth.php:更改键guards
'guards' => [ 'api' => [ 'driver' => 'keycloak', 'provider' => 'users', ], ]
在LUMEN中安装
- 使用composer安装:
composer require cometa/key-cloack
- 发布配置
- 将vendor/cometa-keycloack/config/keyCloack.php复制到config/。
- 将vendor/cometa-keycloack/config/auth.php复制到config/,如果auth文件已存在,只需根据需要合并信息,以下结构的键应保持如下形式。
// config/auth.php [ 'defaults' => [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'api' => [ 'driver' => 'keycloak', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => User::class ] ] ];
- 注册提供者:在bootstrap/app.php中添加行
$app->register(Cometa\KeyCloack\Providers\KeyCloackServiceProvider::class);
- 注册中间件authorization和authentication:在bootstrap/app.php中添加行
$app->routeMiddleware([ 'auth' => Cometa\KeyCloack\Middlewares\Authenticate::class, 'permission' => Cometa\KeyCloack\Middlewares\Authorization::class ]);
使用
如果您正确遵循了所有步骤,只需在路由中调用中间件即可。中间件permission接受一个参数route#scoped,要了解更多关于使用keyclock进行访问控制的信息,请访问keycloack
$router->get('/keycloack', [ 'uses' => "KeyCloackController@index", 'middleware' => ['auth', 'permission:users#list-all'] ]);
示例
- 捕获已验证用户
/** * @return \Illuminate\Contracts\Auth\Authenticatable|null **/ Illuminate\Support\Facades\Auth::user();
- 检查登录用户是否具有角色
/** * @param array<App\Model\Role>| Role * @return bool **/ Illuminate\Support\Facades\Auth::hasRoles(Role::admin); ## OR Illuminate\Support\Facades\Auth::hasRoles([Role::admin, Role::gestor]);
- 返回登录用户的全部权限
/** * @return array **/ Illuminate\Support\Facades\Auth::allPermission();
- 返回所有角色
/** * @return array **/ Illuminate\Support\Facades\Auth::getRoles();
- 返回包含在令牌中的属性
/** * @param string * @return mixed **/ Illuminate\Support\Facades\Auth::getAttribute("name");