nmrkt / guzzle5-oauth2-subscriber
此包已被废弃,不再维护。未建议替代包。
为Guzzle 5.x提供OAuth2认证和重新授权 - 基于kamermans/guzzle4-oauth2-subscriber进行分支和修改
v0.1.1
2014-08-19 21:40 UTC
Requires
- php: >=5.4.0
- ext-json: *
- guzzlehttp/guzzle: 4.*
This package is not auto-updated.
Last update: 2016-08-06 11:28:35 UTC
README
从kamermans/guzzle4-oauth2-subscriber分支,并针对Guzzle 5.x进行了修改
警告:未完全测试。此包满足了所需功能,但我从未编写过完全覆盖包规范的测试。所有更改主要是命名空间从4.x到5.x的变化
为Guzzle 5.x提供OAuth2订阅者。
归属
此插件基于Bojan Zivanovic和Damien Tournoud的Guzzle 3.x OAuth2插件,该插件来自CommerceGuys guzzle-oauth2-plugin仓库。
我最初 fork了那个项目,但由于代码大部分已更改,我需要将版本重置为< 1.0,所以我将其移到了一个新的仓库。
特性
- 通过支持的一种授权类型(代码、客户端凭证、用户凭证、刷新令牌)获取访问令牌。或者您也可以自己设置访问令牌。
- 支持刷新令牌(存储它们并使用它们来获取新的访问令牌)。
- 处理令牌过期(获取新的令牌并重试失败的请求)。
- 允许通过回调存储和查找访问令牌
用法
此插件扩展了Guzzle,透明地添加认证到出站请求,并可选地尝试重新授权,如果访问令牌不再有效。
有几种授权类型可用,如PasswordCredentials
、ClientCredentials
和AuthorizationCode
。
访问令牌方法
如果您已经有一个访问令牌,您可以使用它来向服务进行认证,但请注意,访问令牌是有期限的,获取新访问令牌的过程也包含在此库中(例如,通过使用PasswordCredentials
方法)。
以下是如何使用现有的访问令牌进行请求的示例,因此不需要重新授权客户端
use kamermans\GuzzleOAuth2\OAuth2Subscriber; // Setup OAuth $oauth = new OAuth2Subscriber(); // Manually specify access_token. When it expires, you will get an exception $oauth->getTokenData()->accessToken = 'somelongtoken'; $client = new GuzzleHttp\Client(); // Attach OAuth subscriber to the Guzzle client and all URLs will be authenticated $client->getEmitter()->attach($oauth); $response = $client->get('http://somehost/some_secure_url'); echo "Status: ".$response->getStatusCode()."\n";
客户端凭证方法
客户端凭证通常用于服务器之间的认证。使用此授权类型,客户端代表自己请求授权,因此只有两方参与。至少需要一个client_id
和client_secret
,尽管许多服务需要scope
和其他参数。
以下是一个客户端凭证方法的示例
use kamermans\GuzzleOAuth2\GrantType\ClientCredentials; use kamermans\GuzzleOAuth2\OAuth2Subscriber; // Authorization client - this is used to request OAuth access tokens $reauth_client = new GuzzleHttp\Client([ // URL for access_token request 'base_url' => 'http://some_host/access_token_request_url', ]); $reauth_config = [ "client_id" => "your client id", "client_secret" => "your client secret", "scope" => "your scope(s)", // optional "state" => time(), // optional ]; $grant_type = new ClientCredentials($reauth_client, $reauth_config); $oauth = new OAuth2Subscriber($grant_type); // This is the normal Guzzle client that you use in your application $client = new GuzzleHttp\Client(); $client->getEmitter()->attach($oauth); $response = $client->get('http://somehost/some_secure_url'); echo "Status: ".$response->getStatusCode()."\n";