webiny / oauth2
Webiny OAuth2 组件
v1.6.1
2017-09-29 08:12 UTC
Requires
- php: ^7
- league/oauth2-client: 0.8.*
- webiny/config: ~1.6
- webiny/http: ~1.6
- webiny/std-lib: ~1.6
Requires (Dev)
- mybuilder/phpunit-accelerator: dev-master
- phpunit/phpunit: ~6
Suggests
- webiny/twitter-oauth: Use Webiny TwitterOAuth component for OAuth v1.1.
README
此组件为Facebook、LinkedIn和Google等几个OAuth2系统提供了包装器。在您获取OAuth2访问令牌后,可以使用此包装器与所需的服务进行通信。
安装组件
安装组件的最佳方式是使用Composer。
composer require webiny/oauth2
要获取包的额外版本,请访问Packagist页面。
支持的OAuth2服务器
当前支持的OAuth2服务器有:
配置组件
要使用此组件,您首先需要对其进行配置。配置是通过定义以下参数来完成的:
- 服务器 - 将用于处理OAuth2服务器响应的类
- ClientId - OAuth2客户端ID
- ClientSecret - OAuth2客户端密钥
- 作用域 - 基于所选OAuth2服务器的作用域参数
- RedirectUri - OAuth2服务器在用户授权后重定向用户的位置
示例配置
OAuth2: Facebook: Server: \Webiny\Component\OAuth2\Server\Facebook ClientId: 273234862555915 ClientSecret: fe5G55632eeabc2086f8209a3ff05g22 Scope: email RedirectUri: '/security/login-fb/' GPlus: Server: \Webiny\Component\OAuth2\Server\Google ClientId: 716241231612.apps.googleusercontent.com ClientSecret: KyP8Eag3a60Jgb3mkgiuPFdZYl Scope: openid%20profile%20email RedirectUri: '/security/login-gp/'
用法
此组件依赖于用户的访问令牌,没有它无法对OAuth2服务器进行API调用。要获取访问令牌,请阅读您希望使用的特定服务实现指南。OAuth2组件还与Security
组件集成,作为用户和身份验证提供者,自动获取所需的认证令牌。
示例
// load instance of `GPlus` configuration $instance = OAuth2Loader::getInstance('GPlus'); // set access token $instance->setAccessToken('...'); // do API requests to get user details $userProfile = $instance->request()->getUserDetails(); // do an API request to a specific API method $result = $instance->request()->rawRequest($url, $params);
注册额外服务器
首先创建一个扩展\Webiny\Component\OAuth2\AbstractServer
的类,然后实现抽象方法。所有抽象方法都在AbstractServer
类中描述,您还应该查看当前服务器实现的示例。它们位于\Webiny\Component\OAuth2\Server
文件夹中。
class Instagram extends \Webiny\Component\OAuth2\AbstractServer { public function getAuthorizeUrl(){ // TODO: Implement _getUserDetailsTargetData() method. } public function getAccessTokenUrl(){ // TODO: Implement _getUserDetailsTargetData() method. } protected function _getUserDetailsTargetData() { // TODO: Implement _getUserDetailsTargetData() method. } protected function _processUserDetails($result) { // TODO: Implement _processUserDetails() method. } public function processAuthResponse($response) { // TODO: Implement processAuthResponse() method. } }
一旦您实现了抽象方法的逻辑,就到了将类注册到OAuth2组件的时候了。为此,在您的配置文件中,将Server
属性的值设置为您的全新创建的类。
OAuth2: Instagram: Server: \MyLib\OAuth2\Server\Instagram ...
完成!要使用它,只需像内置类一样进行配置即可。
注意
此组件的代码并未完全由单元测试覆盖。只有主要类被测试,而Bridge
和Server
的测试还需要编写。
资源
要运行单元测试,需要使用以下命令
$ cd path/to/Webiny/Component/OAuth2/
$ composer.phar install
$ phpunit