mustafstarlabs/keycloak-admin-client

轻松连接到Keycloak管理员API

v0.40.2 2023-06-30 12:59 UTC

README

Latest Version

Total Downloads

介绍

这是一个无需烦恼即可连接到Keycloak管理员REST API的PHP客户端。

功能

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

与Keycloak 7.0管理员REST API兼容

https://keycloak.com.cn/docs-api/7.0/rest-api/index.html

如何使用

1. 创建新客户端

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

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

攻击检测

认证管理

客户端属性证书

客户端初始访问

客户端注册策略

客户端角色映射

客户端作用域

客户端

组件

身份提供者

密钥

协议映射器

注意:ID作为clientScopeId或clientId发送,mapperId,其余内容与Keycloak文档相同

领域管理员

角色映射器

角色

角色(按ID)

作用域映射

用户存储提供者

用户