英国超市 / guzzle-oauth2-plugin
Guzzle的OAuth2中间件
v3.0.7
2022-09-06 12:54 UTC
Requires
- php: >=5.6
- firebase/php-jwt: ^3.0|^4.0|^5.0|^6.0
- guzzlehttp/guzzle: ^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-11 18:41:04 UTC
README
英国超市的guzzle-oauth2-plugin
为Guzzle提供OAuth2插件(中间件)。
版本3.x(位于master
分支)适用于Guzzle 6
"sainsburys/guzzle-oauth2-plugin": "^3.0"
版本2.x(位于release/2.0
分支)适用于Guzzle 5
"sainsburys/guzzle-oauth2-plugin": "^2.0"
版本1.x(位于release/1.0
分支)适用于Guzzle 3 [未维护]
"sainsburys/guzzle-oauth2-plugin": "^1.0"
特性
- 通过支持的授权类型之一(代码、客户端凭证、用户凭证、刷新令牌)获取访问令牌。或者您也可以自行设置访问令牌。
- 支持刷新令牌(存储并使用它们来获取新的访问令牌)。
- 处理令牌过期(获取新的令牌并重试失败的请求)。
运行测试
首先,通过运行composer install --prefer-dist
确保您已安装所有依赖项,然后简单运行.vendor/bin/phpunit
。
示例
use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; use Sainsburys\Guzzle\Oauth2\GrantType\RefreshToken; use Sainsburys\Guzzle\Oauth2\GrantType\PasswordCredentials; use Sainsburys\Guzzle\Oauth2\Middleware\OAuthMiddleware; $baseUri = 'https://example.com'; $config = [ PasswordCredentials::CONFIG_USERNAME => 'test@example.com', PasswordCredentials::CONFIG_PASSWORD => 'test password', PasswordCredentials::CONFIG_CLIENT_ID => 'test-client', PasswordCredentials::CONFIG_TOKEN_URL => '/oauth/token', 'scope' => 'administration', ]; $oauthClient = new Client(['base_uri' => $baseUri]); $grantType = new PasswordCredentials($oauthClient, $config); $refreshToken = new RefreshToken($oauthClient, $config); $middleware = new OAuthMiddleware($oauthClient, $grantType, $refreshToken); $handlerStack = HandlerStack::create(); $handlerStack->push($middleware->onBefore()); $handlerStack->push($middleware->onFailure(5)); $client = new Client(['handler'=> $handlerStack, 'base_uri' => $baseUri, 'auth' => 'oauth2']); $response = $client->request('GET', '/api/user/me'); // Use $middleware->getAccessToken(); and $middleware->getRefreshToken() to get tokens // that can be persisted for subsequent requests.
使用Symfony DI配置的示例
<container xmlns="https://symfony.ac.cn/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://symfony.ac.cn/schema/dic/services https://symfony.ac.cn/schema/dic/services/services-1.0.xsd"> <parameters> <parameter key="acme.base_uri">https://example.com</parameter> <parameter key="acme.oauth.config" type="collection"> <parameter key="username">test@example.com</parameter> <parameter key="password">test password</parameter> <parameter key="client_id">test-client</parameter> <parameter key="token_url">/oauth/token</parameter> </parameter> </parameters> <services> <service id="acme.oauth.guzzle.client" class="GuzzleHttp\Client" public="false"> <argument type="collection"> <argument key="base_uri">%acme.base_uri%</argument> </argument> </service> <service id="acme.oauth.grant_type" class="Sainsburys\Guzzle\Oauth2\GrantType\PasswordCredentials" public="false"> <argument type="service" id="acme.oauth.guzzle.client"/> <argument>%acme.oauth.config%</argument> </service> <service id="acme.oauth.refresh_token" class="Sainsburys\Guzzle\Oauth2\GrantType\RefreshToken" public="false"> <argument type="service" id="acme.oauth.guzzle.client"/> <argument>%acme.oauth.config%</argument> </service> <service id="acme.oauth.middleware" class="Sainsburys\Guzzle\Oauth2\Middleware\OAuthMiddleware" public="false"> <argument type="service" id="acme.oauth.guzzle.client"/> <argument type="service" id="acme.oauth.grant_type"/> <argument type="service" id="acme.oauth.refresh_token"/> </service> <service id="acme.guzzle.handler" class="GuzzleHttp\HandlerStack" public="false"> <factory class="GuzzleHttp\HandlerStack" method="create"/> <call method="push"> <argument type="service"> <service class="Closure"> <factory service="acme.oauth.middleware" method="onBefore"/> </service> </argument> </call> <call method="push"> <argument type="service"> <service class="Closure"> <factory service="acme.oauth.middleware" method="onFailure"/> <argument>5</argument> </service> </argument> </call> </service> <service id="acme.guzzle.client" class="GuzzleHttp\Client"> <argument type="collection"> <argument key="handler" type="service" id="acme.guzzle.handler" /> <argument key="base_uri">%acme.base_uri%</argument> <argument key="auth">oauth2</argument> </argument> </service> </services> </container>