2017 © Pedro Peláez
 

yii2-extension yii2-oauth2-server

OAuth2 Server for PHP

image

tecnocen/yii2-oauth2-server

OAuth2 Server for PHP

  • Thursday, August 2, 2018
  • by Faryshta
  • Repository
  • 3 Watchers
  • 0 Stars
  • 1,057 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 6 Versions
  • 34 % Grown

The README.md

Yii2 OAuth2 Server

A wrapper for implementing an OAuth2 Server., (*1)

Latest Stable Version Total Downloads, (*2)

Travis Build Status Travis, (*3)

This project was forked from Filsh Original Project but the changes are not transparent, read [UPGRADE.md] to pass to the latest version., (*4)

Installation

The preferred way to install this extension is through composer., (*5)

Either run, (*6)

php composer.phar require --prefer-dist tecnocen/yii2-oauth2-server "*"

or add, (*7)

"tecnocen/yii2-oauth2-server": "~4.1"

to the require section of your composer.json., (*8)

Usage

To use this extension, simply add the following code in your application configuration as a new module:, (*9)

    'bootstrap' => ['oauth2'],
    'modules'=>[
        // other modules ...
        'oauth2' => [
            'class' => 'tecnocen\oauth2server\Module',            
            'tokenParamName' => 'accessToken',
            'tokenAccessLifetime' => 3600 * 24,
            'storageMap' => [
                'user_credentials' => 'app\models\User',
            ],
            'grantTypes' => [
                'user_credentials' => [
                    'class' => 'OAuth2\GrantType\UserCredentials',
                ],
                'refresh_token' => [
                    'class' => 'OAuth2\GrantType\RefreshToken',
                    'always_issue_new_refresh_token' => true
                ]
            ]
        ]
    ],

Bootstrap will initialize translation and add the required url rules to Yii::$app->urlManager., (*10)

JWT tokens

There is no JWT token support on this fork, feel free to submit a (pull request)[https://github.com/tecnocen-com/yii2-oauth2-server/pulls] to enable this functionality., (*11)

UserCredentialsInterface

The class passed to Yii::$app->user->identityClass must implement the interface \OAuth2\Storage\UserCredentialsInterface, to store oauth2 credentials in user table., (*12)

use Yii;

class User extends common\models\User
    implements \OAuth2\Storage\UserCredentialsInterface
{

    /**
     * Implemented for Oauth2 Interface
     */
    public static function findIdentityByAccessToken($token, $type = null)
    {
        /** @var \tecnocen\oauth2server\Module $module */
        $module = Yii::$app->getModule('oauth2');
        $token = $module->getServer()->getResourceController()->getToken();
        return !empty($token['user_id'])
                    ? static::findIdentity($token['user_id'])
                    : null;
    }

    /**
     * Implemented for Oauth2 Interface
     */
    public function checkUserCredentials($username, $password)
    {
        $user = static::findByUsername($username);
        if (empty($user)) {
            return false;
        }
        return $user->validatePassword($password);
    }

    /**
     * Implemented for Oauth2 Interface
     */
    public function getUserDetails($username)
    {
        $user = static::findByUsername($username);
        return ['user_id' => $user->getId()];
    }
}

Migrations

The next step is to run migrations, (*13)

yii migrate all -p=@tecnocen/oauth2server/migrations/tables
yii fixture "*" -n=tecnocen/oauth2server/fixtures

The first commando create the OAuth2 database scheme. The second command insert test client credentials testclient:testpass for http://fake/., (*14)

Controllers

To support authentication by access token. Simply add the behaviors for your controller or module., (*15)

use yii\helpers\ArrayHelper;
use yii\filters\auth\HttpBearerAuth;
use yii\filters\auth\QueryParamAuth;
use tecnocen\oauth2server\filters\auth\CompositeAuth;

class Controller extends \yii\rest\Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return ArrayHelper::merge(parent::behaviors(), [
            'authenticator' => [
                'class' => CompositeAuth::class,
                'authMethods' => [
                    ['class' => HttpBearerAuth::class],
                    [
                        'class' => QueryParamAuth::class,
                        'tokenParam' => 'accessToken',
                    ],
                ]
            ],
        ]);
    }
}

The code above is the same as the default implementation which can be simplified as:, (*16)

use yii\helpers\ArrayHelper;
use tecnocen\oauth2server\filters\auth\CompositeAuth;

class Controller extends \yii\rest\Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return ArrayHelper::merge(parent::behaviors(), [
            'authenticator' => CompositeAuth::class,
        ]);
    }
}

Scopes

The property tecnocen\oauth2server\filters\auth\CompositeAuth::$actionScopes set which actions require specific scopes. If those scopes are not meet the action wont be executed, and the server will reply with an HTTP Status Code 403., (*17)

public function behaviors()
{
    return ArrayHelper::merge(parent::behaviors(), [
        'authenticator' => [
            'class' => CompositeAuth::class,
            'actionScopes' => [
                'create' => 'default create',
                'update' => 'default edit',
                '*' => 'default', // wildcards are allowed
            ]
        ],,
    ]);
}

Automatically Revoke Tokens

Sometimes its neccessary to revoke a token on each request to prevent the request from being triggered twice., (*18)

To enable this functionality you need to implement tecnocen\oauth2server\RevokeAccessTokenInterface in the class used to identify the authenticated user., (*19)


use OAuth2\Storage\UserCredentialsInterface; use tecnocen\oauth2server\RevokeAccessTokenInterface; use tecnocen\oauth2server\RevokeAccessTokenTrait; class User extend \yii\db\ActiveRecord implement UserCredentialsInterface, RevokeAccessTokenInterface { use RevokeAccessTokenTrait; // optional, trait with default implementation. // rest of the class. }

Then use the previous class as configuration for Yii::$app->user->identityClass, (*20)

Attaching the action filter tecnocen\oauth2server\filters\RevokeAccessToken allows to configure the actions to automatically revoke the access token., (*21)

public function behaviors()
{
    return [
        'revokeToken' => [
            'class' => \tecnocen\oauth2server\filters\RevokeAccessToken::class,
            // optional only revoke the token if it has any of the following
            // scopes. if not defined it will always revoke the token.
            'scopes' => ['author', 'seller'],
            // optional whether or not revoke all tokens or just the active one
            'revokeAll' => true,
            // optional if non authenticated users are permited.
            'allowGuests' => true,
            // which actions this behavior applies to.
            'only' => ['create', 'update'],
        ]
    ];
}

Generate Token with JS

To get access token (js example):, (*22)

var url = window.location.host + "/oauth2/token";
var data = {
    'grant_type':'password',
    'username':'<some login from your user table>',
    'password':'<real pass>',
    'client_id':'testclient',
    'client_secret':'testpass'
};
//ajax POST `data` to `url` here
//

Built With

Code of Conduct

Please read CODE_OF_CONDUCT.md for details on our code of conduct., (*23)

Contributing

Please read CONTRIBUTING.md for details on the process for submitting pull requests to us., (*24)

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository., (*25)

Considering SemVer for versioning rules 9, 10 and 11 talk about pre-releases, they will not be used within the Tecnocen-com., (*26)

Authors

See also the list of contributors who participated in this project., (*27)

License

This project is licensed under the MIT License - see the LICENSE.md file for details, (*28)

Acknowledgments

  • TO DO - Hat tip to anyone who's code was used
  • TO DO - Inspiration
  • TO DO - etc

yii2-oauth2-server, (*29)

For more, see https://github.com/bshaffer/oauth2-server-php, (*30)

The Versions

02/08 2018

dev-optionsFix

dev-optionsFix https://github.com/tecnocen-com/yii2-oauth2-server

OAuth2 Server for PHP

  Sources   Download

MIT

The Requires

 

The Development Requires

by Igor Maliy
by Christopher C (Chofoteddy)

extension oauth module yii oauth2

20/12 2017

dev-master

9999999-dev https://github.com/tecnocen-com/yii2-oauth2-server

OAuth2 Server for PHP

  Sources   Download

MIT

The Requires

 

The Development Requires

by Igor Maliy
by Christopher C (Chofoteddy)

extension oauth module yii oauth2

04/12 2017
30/11 2017
15/11 2017
14/11 2017