mohammad-waleed/keycloak-admin-client

轻松连接到 keycloak 管理API

v0.38.0 2024-04-02 12:36 UTC

README

Latest Version

Total Downloads

Donate

介绍

这是一个无需头痛即可连接到 keycloak 管理REST API的 PHP客户端。

功能

  1. 易于使用
  2. 无需获取令牌或生成它 - 客户端已处理
  3. 无需指定除基本URI以外的任何URL
  4. 无需对 JSON 进行编码/解码,只需按预期提供数据

与 Keycloak 7.0+ 管理REST API 兼容。

https://keycloak.com.cn/documentation -> "Administration REST API"

如何使用

1. 创建新客户端

$client = Keycloak\Admin\KeycloakClient::factory([
    'realm' => 'master',
    'username' => 'admin',
    'password' => '1234',
    'client_id' => 'admin-cli',
    'baseUri' => 'http://127.0.0.1:8180',
]);

从版本 0.30 开始,如果您的 Keycloak 基础URL以 auth/ 开头,请将其添加到 baseUri(例如,http://127.0.0.1:8180/auth/)。Keycloak 7 到 16 版本的基础URL系统性地为 auth/。在 Keycloak 17+ 中,这取决于您的设置。

2. 使用它

$client->getUsers();

//Result
// Array of users
/*
[
     [
       "id" => "39839a9b-de08-4d2c-b91a-a6ce2595b1f3",
       "createdTimestamp" => 1571663375749,
       "username" => "admin",
       "enabled" => true,
       "totp" => false,
       "emailVerified" => false,
       "disableableCredentialTypes" => [
         "password",
       ],
       "requiredActions" => [],
       "notBefore" => 0,
       "access" => [
         "manageGroupMembership" => true,
         "view" => true,
         "mapRoles" => true,
         "impersonate" => true,
         "manage" => true,
       ],
     ],
   ]
*/

$client->createUser([
    'username' => 'test',
    'email' => 'test@test.com',
    'enabled' => true,
    'credentials' => [
        [
            'type'=>'password',
            'value'=>'1234',
        ],
    ],
]);

定制

支持的凭证

您可以通过更改 keycloak 客户端配置来更改用于身份验证的凭证类型。

目前,以下凭证被支持

  • 密码凭证,默认使用
    • 用于通过用户帐户进行身份验证
    $client = Keycloak\Admin\KeycloakClient::factory([
        ...
        'grant_type' => 'password',
        'username' => 'admin',
        'password' => '1234',
    ]);
  • 客户端凭证
    • 用于通过客户端服务帐户进行身份验证
    $client = Keycloak\Admin\KeycloakClient::factory([
        ...
        'grant_type' => 'client_credentials',
        'client_id' => 'admin-cli',
        'client_secret' => '84ab3d98-a0c3-44c7-b532-306f222ce1ff',
    ]);

注入中间件

您可以通过使用 middlewares 关键字在 keycloak 客户端配置中注入 Guzzle 客户端中间件

例如

use GuzzleHttp\Middleware;
use Psr\Http\Message\RequestInterface;

$client = Keycloak\Admin\KeycloakClient::factory([
    ...
    'middlewares' => [
        // throws exceptions when request fails
        Middleware::httpErrors(),
        // other custom middlewares
        Middleware::mapRequest(function (RequestInterface $request) {
            return $request;
        }),
    ],
]);

更改令牌的保存和存储方式

默认情况下,令牌在运行时保存。这意味着在创建新客户端时不会使用之前的令牌。

您可以通过实现自己的 TokenStorage(一个描述令牌如何存储和检索的接口)来自定义客户端配置中令牌的存储方式。

class CustomTokenStorage implements TokenStorage 
{
    public function getToken() 
    {
        // TODO
    }
    
    public function saveToken(array $token)
    {
        // TODO
    }
}

$client = Keycloak\Admin\KeycloakClient::factory([
    ...
    'token_storage' => new CustomTokenStorage(),
]);

自定义 Keycloak 端点

您可以通过使用 custom_operations 关键字在 keycloak 客户端配置中注入 Guzzle 服务操作。这样,您可以通过自定义扩展内置支持的端点。

$client = KeycloakClient::factory([
...
    'custom_operations' => [
        'getUsersByAttribute' => [
            'uri' => '/auth/realms/{realm}/userapi-rest/users/search-by-attr',
            'description' => 'Get users by attribute Returns a list of users, filtered according to query parameters',
            'httpMethod' => 'GET',
            'parameters' => [
                'realm' => [
                    'location' => 'uri',
                    'description' => 'The Realm name',
                    'type' => 'string',
                    'required' => true,
                ],
                'attr' => [
                    'location' => 'query',
                    'type' => 'string',
                    'required' => true,
                ],
                'value' => [
                    'location' => 'query',
                    'type' => 'string',
                    'required' => true,
                ],
            ],
        ],
    ]
]);

支持的API

攻击检测

认证管理

客户端属性证书

客户端初始访问

客户端注册策略

客户端角色映射

客户端作用域

客户端

组件

身份提供者

密钥

协议映射器

注意:Ids 以 clientScopeId 或 clientId 发送,mapperId,其余的都如 Keycloak 文档中所述

领域管理员

角色映射器

角色

角色(按ID)

作用域映射

用户存储提供者

用户