acsystems/keycloak-php-sdk

Keycloak 管理API的PHP包装器

4.4.0 2024-01-08 10:04 UTC

This package is auto-updated.

Last update: 2024-09-08 11:26:12 UTC


README

此包旨在封装Keycloak API,并提供一个简单且一致的层,用于管理您的keycloak领域。

License PHP Code Style

文档

快速开始

首先使用您的凭据创建一个KeycloakClient。

/*
 * Keycloak < v17
 */
$kcClient = new Keycloak\KeycloakClient(
    'my-client-id',
    'my-client-secret',
    'my-realm',
    'https://my-keycloak-base-url.com'
);

/*
 * Keycloak v17+
 */
$kcClient = new Keycloak\KeycloakClient(
    'my-client-id',
    'my-client-secret',
    'my-realm',
    'https://my-keycloak-base-url.com',
    null,
    ''
);

然后您可以将客户端传递给任何API。

$userApi = new Keycloak\User\UserApi($kcClient);
$allUsers = $userApi->findAll();

构建Keycloak API URL

Keycloak的旧版本默认将URL路径段/auth包含在API路径中。客户端构造函数也做了同样的事情。

为了增加一些灵活性但避免在此包中引入破坏性更改,您有两个选项

  1. 配置Keycloak以保留/auth URL路径段
  2. 将空字符串''提供给客户端构造函数的新$basePath参数。
    • 如果您已将Keycloak配置为在主机和/realms/...段之间使用某些其他路径前缀,请确保将其与此参数值匹配。
示例1(较旧默认值)
$client = new KeycloakClient(
    'my-client-id',
    'my-client-secret',
    'my-realm'
);

构建以下内容

https://my-keycloak-base-url.com/auth
# then Realm segments are added:
https://my-keycloak-base-url.com/auth/realms/my-realm

如果您调用$client->sendRequest('GET', '.well-known/openid-configuration')

https://my-keycloak-base-url.com/auth/realms/my-realm/.well-known/openid-configuration
示例2(v17+默认值)
$client = new KeycloakClient(
    'my-client-id',
    'my-client-secret',
    'my-realm',
    null,
    ''
);

构建以下内容

https://my-keycloak-base-url.com
# then Realm segments are added:
https://my-keycloak-base-url.com/realms/my-realm

如果您调用$client->sendRequest('GET', '.well-known/openid-configuration')

https://my-keycloak-base-url.com/realms/my-realm/.well-known/openid-configuration
示例3(自定义路径)
$client = new KeycloakClient(
    'my-client-id',
    'my-client-secret',
    'my-realm',
    null,
    'custom-path'
);

构建以下内容

https://my-keycloak-base-url.com/custom-path/realms/my-realm

如果您调用$client->sendRequest('GET', '.well-known/openid-configuration')

https://my-keycloak-base-url.com/custom-path/realms/my-realm/.well-known/openid-configuration
示例4(备用令牌领域)
$client = new KeycloakClient(
    'my-client-id',
    'my-client-secret',
    'my-realm',
    'alternate-token-realm',
    ''
);

构建以下内容

# Applies only to the token endpoint:
https://my-keycloak-base-url.com/realms/alternate-token-realm/protocol/openid-connect/token

# Everything else uses the original Realm:
https://my-keycloak-base-url.com/realms/my-realm/protocol/openid-connect/token

如果您调用$client->sendRequest('GET', '.well-known/openid-configuration')

https://my-keycloak-base-url.com/realms/my-realm/.well-known/openid-configuration

测试平台

这些是官方支持此包的平台。任何其他版本可能都能工作,但不保证。

平台版本
PHP7.4+
Keycloak11 - 21.1

运行测试

尽管建议不要这样做,但所有测试都是在实时Keycloak环境中执行的。

  • 在主领域中创建一个客户端。
    • 访问类型:机密
    • 启用服务账户:true
    • 在服务账户角色选项卡上附加管理员权限
  • 创建/tests/.env.local并配置您的参数,有关示例,请参阅/tests/.env

贡献

在贡献之前,请阅读我们的贡献指南