acsystems / keycloak-php-sdk
Keycloak 管理API的PHP包装器
4.4.0
2024-01-08 10:04 UTC
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^7.7
- league/oauth2-client: ^2.7
Requires (Dev)
- phpunit/phpunit: ^9.6
- roave/security-advisories: dev-latest
- symfony/dotenv: ^v5.4
README
此包旨在封装Keycloak API,并提供一个简单且一致的层,用于管理您的keycloak领域。
文档
快速开始
首先使用您的凭据创建一个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路径中。客户端构造函数也做了同样的事情。
为了增加一些灵活性但避免在此包中引入破坏性更改,您有两个选项
- 配置Keycloak以保留
/auth
URL路径段 - 将空字符串
''
提供给客户端构造函数的新$basePath
参数。- 如果您已将Keycloak配置为在主机和
/realms/...
段之间使用某些其他路径前缀,请确保将其与此参数值匹配。
- 如果您已将Keycloak配置为在主机和
示例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
测试平台
这些是官方支持此包的平台。任何其他版本可能都能工作,但不保证。
平台 | 版本 |
---|---|
PHP | 7.4+ |
Keycloak | 11 - 21.1 |
运行测试
尽管建议不要这样做,但所有测试都是在实时Keycloak环境中执行的。
- 在主领域中创建一个客户端。
- 访问类型:机密
- 启用服务账户:true
- 在服务账户角色选项卡上附加管理员权限
- 创建
/tests/.env.local
并配置您的参数,有关示例,请参阅/tests/.env
。
贡献
在贡献之前,请阅读我们的贡献指南。