2017 © Pedro Peláez
 

library zendservice-oauth2

Oauth2.0 service for Zend Framework 2

image

jvandemo/zendservice-oauth2

Oauth2.0 service for Zend Framework 2

  • Thursday, March 7, 2013
  • by jvandemo
  • Repository
  • 1 Watchers
  • 3 Stars
  • 42 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

ZendService_Oauth2

Oauth2 service for Zend Framework 2, (*1)

Status

Currently under development so please don't use in production environments yet..., (*2)

To do

  • Write more and better documentation
  • Provide more unit tests

Composer

ZendService_Oauth2 is now available as composer package on https://packagist.org/packages/jvandemo/zendservice-oauth2, (*3)

To include it in your project, add the following line to your composer.json:, (*4)

"require": {
    "jvandemo/zendservice-oauth2" : "dev-master"
}

Live demo

There is a live demo available at http://jvandemo.my.phpcloud.com/ZendService_Oauth2/demos/ZendService/Oauth2/AuthorizationCode/index.php, (*5)

The source of the demo page is included in the demos folder., (*6)

A quick demo

Example code using the default Authorization Code grant:, (*7)

use ZendService\Oauth2\Client\Client;

// Create configuration
$config = array(

    // Oauth2 client options
    'client' => array(
        'client_id' => 'your_client_id',
        'client_secret' => 'your_client_secret',
        'authorization_url' => 'https://api.youwishtoconnect.to/authorize',
        'access_token_url' => 'https://api.youwishtoconnect.to/access_token',
        'redirect_uri' => 'http://www.yourwebsite.com/where_to_go_after_authorization',
        'state' => 'somerandomstate',
    ),

    // Http client options
    'http' => array(
        'adapter'   => 'Zend\Http\Client\Adapter\Curl',
        'curloptions' => array(
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
        ),
    ),
);

// Create a new Oauth2.0 client and pass in the config
$client = new Client($config);

// Let the client build the authorization request for you:
$url = $client->getAuthorizationRequestUrl()

// Redirect the user to the authorization request url:
return $this->redirect()->toUrl($url);

The third party authorization server will redirect you to the url you specified in redirect_uri:, (*8)

// Grab the access token from the authorization response:
$code = $_GET['code'];

// Use the authorization code to get an access token: 
$accessToken = $client->getAccessToken(array(
    'code' => $code
));

The access token is a very lightweight object that can be stored in a session or serialized in your backend system for later use, so you don't have to repeat the previous steps if not necessary., (*9)

Then, whenever you need to perform an Oauth2.0 request:, (*10)

// Create a client
$client = new Client($config);

// Get the token from your backend e.g. with unserialize
$accessToken = getAccessTokenFromYourBackend(); // Replace with your custom function

and perform GET requests
$response = $client->get('http://api.youwishtoconnect.to/some_endpoint', array('access_token' => $accessToken->getAccessToken()));

// or POST requests
$response = $client->post('http://api.youwishtoconnect.to/some_endpoint', array('access_token' => $accessToken->getAccessToken()));

// Some third parties e.g. Linkedin requires the token to be passed as `oauth2_access_token` parameter, so you can easily change it as required
$response = $client->get('http://api.youwishtoconnect.to/some_endpoint', array('oauth2_access_token' => $accessToken->getAccessToken()));

By default, the Zend\Http\Client is used to perform the requests, so you get a 'Zend\Http\Response' obejct:, (*11)

// Print the response body
echo $response->getBody()

Main features

  • Provides a main ZendService\Oauth2\Client\Client class to interact with for ease of use
  • Works out of the box with the following default configuration:
    • Uses AuthorizationCode as the default AuthorizationGrant
    • Uses Zend\Http\Client as the default Http client
    • Uses ZendService\Oauth2\AccessToken\AccessToken as the default AccessToken object
    • Uses ZendService\Oauth2\Client\Client as the default client implementation
  • Supports custom client implementation to add or change behaviours
    • Can extend ZendService\Oauth2\Client\AbstractClient
    • Must implement ZendService\Oauth2\Client\ClientInterface
  • Add custom Oauth2.0 flows by adding custom authorization grants:
    • Can extend ZendService\Oauth2\AuthorizationGrant\AbstractAuthorizationGrant
    • Must implement ZendService\Oauth2\AuthorizationGrant\AuthorizationGrantInterface
  • Supports custom Http clients
    • Must implement ZendService\Oauth2\Http\Client\ClientInterface

Suggestions?

Contact me, write a comment or better yet: fork, implement and create a pull request :-), (*12)

The Versions

07/03 2013
07/03 2013