webiny/oauth2

Webiny OAuth2 组件

v1.6.1 2017-09-29 08:12 UTC

README

此组件为Facebook、LinkedIn和Google等几个OAuth2系统提供了包装器。在您获取OAuth2访问令牌后,可以使用此包装器与所需的服务进行通信。

安装组件

安装组件的最佳方式是使用Composer。

composer require webiny/oauth2

要获取包的额外版本,请访问Packagist页面

支持的OAuth2服务器

当前支持的OAuth2服务器有:

  • Facebook
  • Google
  • LinkedIn

配置组件

要使用此组件,您首先需要对其进行配置。配置是通过定义以下参数来完成的:

  • 服务器 - 将用于处理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
            ...

完成!要使用它,只需像内置类一样进行配置即可。

注意

此组件的代码并未完全由单元测试覆盖。只有主要类被测试,而BridgeServer的测试还需要编写。

资源

要运行单元测试,需要使用以下命令

$ cd path/to/Webiny/Component/OAuth2/
$ composer.phar install
$ phpunit