idci / guzzle-bundle-knpu-oauth2-plugin
此包集成了 KnpU OAuth2 功能,使用 Guzzle Bundle 插件。
Requires
- eightpoints/guzzle-bundle: ^7.0|^8.0
- knpuniversity/oauth2-client-bundle: ^2.0
- symfony/cache: ^5.3|^6.0
- symfony/config: ^5.3|^6.0
- symfony/dependency-injection: ^5.3|^6.0
- symfony/http-kernel: ^5.3|^6.0
Requires (Dev)
- phpunit/phpunit: ^6.0
- symfony/stopwatch: ^5.3|^6.0
- symfony/twig-bundle: ^5.3|^6.0
README
此包集成了 KnpU OAuth2 功能,使用 Guzzle Bundle 插件。
此包深受以下工作的启发: gregurco/guzzle-bundle-oauth2-plugin。OAuth2 协商以检索 AccessToken 由 knpuniversity/oauth2-client-bundle 和 league/oauth2-client 处理。
安装
使用 composer
$ composer require idci/guzzle-bundle-knpu-oauth2-plugin
启用包
如需覆盖 registerBundles
函数,请按照以下方式在 src/Kernel.php
中进行操作
public function registerBundles(): iterable { $contents = require $this->getBundlesPath(); foreach ($contents as $class => $envs) { if ($envs[$this->environment] ?? $envs['all'] ?? false) { if ($class === \EightPoints\Bundle\GuzzleBundle\EightPointsGuzzleBundle::class) { yield new $class([ new \IDCI\Bundle\GuzzleBundleKnpUOAuth2Plugin\IDCIGuzzleBundleKnpUOAuth2Plugin(), ]); } else { yield new $class(); } } } }
配置
按照 官方文档 中的说明配置您的 KnpUOAuth2 客户端,在 config/packages/knpu_oauth2_client.yaml
中。以下是一个使用 Keycloak 客户端的示例
knpu_oauth2_client: clients: my_keycloak_client: type: keycloak auth_server_url: '%env(string:KEYCLOAK_SERVER_BASE_URL)%' realm: '%env(string:KEYCLOAK_REALM)%' client_id: '%env(string:KEYCLOAK_CLIENT_ID)%' client_secret: '%env(string:KEYCLOAK_CLIENT_SECRET)%' redirect_route: null redirect_params: { } # encryption_algorithm: null # Optional: Encryption algorith, i.e. RS256 # encryption_key_path: null # Optional: Encryption key path, i.e. ../key.pem # encryption_key: null # Optional: Encryption key, i.e. contents of key or certificate # version: '20.0.1' # Optional: The keycloak version to run against # use_state: false # whether to check OAuth2 "state": defaults to true
然后,当您想自动将 bearer 令牌添加到您的 Guzzle 客户端请求中时,只需在 config/packages/eight_points_guzzle.yaml
中使用 knpu_oauth2
插件配置。以下是一个使用 my_keycloak_client
KnpUOAuth2 客户端的示例
eight_points_guzzle: clients: my_guzzle_client: base_url: '%env(string:MY_GUZZLE_CLIENT_ENV_BASE_URL)%' options: auth: knpu_oauth2 plugin: knpu_oauth2: client: my_keycloak_client
如果您想存储您的 bearer 令牌,可以使用 persistent
选项设置为 true。默认情况下,此包使用 cache.app
服务来存储 bearer 令牌,但您可以使用 cache_service_id
选项更改此设置。以下是一个使用自定义 Symfony\Component\Cache\Adapter\RedisAdapter
服务的示例来存储您的 bearer 令牌
config/services.yaml
:
services: app.redis_provider: class: \Redis factory: ['Symfony\Component\Cache\Adapter\RedisAdapter', 'createConnection'] arguments: - 'redis://%env(resolve:REDIS_HOST)%' app.cache.adapter.redis.keycloak: parent: 'cache.adapter.redis' tags: - { name: 'cache.pool', namespace: 'KEYCLOAK' }
config/packages/cache.yaml
:
framework: cache: pools: app.keycloak.cache: default_lifetime: 600 # Ten minutes adapter: app.cache.adapter.redis.keycloak provider: app.redis_provider
config/packages/eight_points_guzzle.yaml
:
eight_points_guzzle: clients: my_guzzle_client: base_url: '%env(string:MY_GUZZLE_CLIENT_ENV_BASE_URL)%' options: auth: knpu_oauth2 plugin: knpu_oauth2: client: my_keycloak_client persistent: true cache_service_id: app.keycloak.cache