207 lines
6.0 KiB
Markdown
207 lines
6.0 KiB
Markdown
SocialConnect Auth
|
|
==================
|
|
|
|
[](https://packagist.org/packages/socialconnect/auth)
|
|
[](https://github.com/SocialConnect/auth/blob/master/LICENSE)
|
|
[](https://scrutinizer-ci.com/g/SocialConnect/auth/?branch=master)
|
|
[](https://travis-ci.org/SocialConnect/auth)
|
|
[](https://www.versioneye.com/user/projects/54d7935c2bc7901e48000014)
|
|
[](https://scrutinizer-ci.com/g/SocialConnect/auth/?branch=master)
|
|
[](https://travis-ci.org/SocialConnect/auth)
|
|
|
|
> Open source social sign on PHP. Connect your application(s) with social network(s).
|
|
|
|
See [example](./example).
|
|
|
|
If I didn't see your issue, PR please ping me direct by [Telegram](https://telegram.me/ovrweb)!
|
|
|
|
## Supported type of providers
|
|
|
|
- [x] OAuth1 [spec RFC 5849](https://tools.ietf.org/html/rfc5849)
|
|
- [x] OAuth2 [spec RFC 6749](https://tools.ietf.org/html/rfc6749)
|
|
- [X] OpenID v1 (1.1) (WIP!) [spec](https://openid.net/specs/openid-authentication-1_1.html)
|
|
- [X] OpenID v2 [spec](http://openid.net/specs/openid-authentication-2_0.html)
|
|
- [X] OpenID Connect (1.0) [spec](http://openid.net/specs/openid-connect-core-1_0.html#OpenID.Discovery)
|
|
- [X] JWT (JSON Web Token) [spec RFC 7519](https://tools.ietf.org/html/rfc7519)
|
|
- [X] JWK (JSON Web Keys) [spec RFC 7517](https://tools.ietf.org/html/rfc7517)
|
|
|
|
## Supported providers
|
|
|
|
### OpenId
|
|
|
|
* PayPal (WIP!)
|
|
* Steam
|
|
|
|
### OAuth 1
|
|
|
|
* Twitter
|
|
* 500px
|
|
* Tumblr
|
|
|
|
### OAuth 2
|
|
|
|
* Amazon
|
|
* Facebook
|
|
* Vk (ВКонтакте)
|
|
* Instagram
|
|
* Google
|
|
* GitHub
|
|
* GitLab
|
|
* Slack
|
|
* BitBucket
|
|
* Twitch
|
|
* Vimeo
|
|
* DigitalOcean
|
|
* Yandex
|
|
* MailRu
|
|
* Microsoft (MSN)
|
|
* Odnoklassniki
|
|
* Discord
|
|
* SmashCast
|
|
* Steein
|
|
* LinkedIn
|
|
* Yahoo!
|
|
* Wordpress
|
|
|
|
#### OpenIDConnect
|
|
|
|
* Google (you can use Google from `OAuth2` or `OpenIDConnect`)
|
|
* PixelPin
|
|
|
|
## Installation
|
|
|
|
The recommended way to install `socialconnect/auth` is via Composer.
|
|
|
|
1. If you do not have composer installed, download the [`composer.phar`](https://getcomposer.org/composer.phar) executable or use the installer.
|
|
|
|
``` sh
|
|
$ curl -sS https://getcomposer.org/installer | php
|
|
```
|
|
|
|
2. Run `php composer.phar require socialconnect/auth` or add a new requirement in your composer.json.
|
|
|
|
``` json
|
|
{
|
|
"require": {
|
|
"socialconnect/auth": "^1.5.0"
|
|
}
|
|
}
|
|
```
|
|
|
|
3. Run `php composer.phar update`
|
|
|
|
## Referenced projects
|
|
|
|
- [OrgHeiglHybridAuth](https://github.com/heiglandreas/HybridAuth) from [@heiglandreas](https://github.com/heiglandreas) - Authentication-layer for your ZendFramework3 App.
|
|
- [cakephp-social-auth](https://github.com/ADmad/cakephp-social-auth) from [@ADmad](https://github.com/ADmad) - CakePHP plugin.
|
|
- [Phalcon-module-skeleton](https://github.com/ovr/phalcon-module-skeleton) from [@ovr](https://github.com/ovr) - There is a module for Phalcon inside project.
|
|
|
|
## How to use
|
|
|
|
Composer:
|
|
|
|
```sh
|
|
composer install
|
|
```
|
|
|
|
First you need to setup `SocialConnect\Auth\Service`:
|
|
|
|
```php
|
|
$httpClient = new \SocialConnect\Common\Http\Client\Curl();
|
|
|
|
/**
|
|
* By default we are using Curl class from SocialConnect/Common
|
|
* but you can use Guzzle wrapper ^5.3|^6.0
|
|
*/
|
|
//$httpClient = new \SocialConnect\Common\Http\Client\Guzzle(
|
|
// new \GuzzleHttp\Client()
|
|
//);
|
|
|
|
/**
|
|
* Why do we need cache decorator for HTTP Client?
|
|
* Providers like OpenID & OpenIDConnect require US
|
|
* to request OpenID specification (and JWK(s) for OpenIDConnect)
|
|
*
|
|
* It's not a best practice to request it every time, because it's unneeded round trip to the server
|
|
* if you are using OpenID or OpenIDConnect we suggest you to use cache
|
|
*
|
|
* If you don`t use providers like (Steam) from OpenID or OpenIDConnect
|
|
* you may skip this because it's not needed
|
|
*/
|
|
$httpClient = new \SocialConnect\Common\Http\Client\Cache(
|
|
$httpClient,
|
|
/**
|
|
* Please dont use FilesystemCache for production/stage env, only for local testing!
|
|
* It doesnot support cache expire (remove)
|
|
*/
|
|
new \Doctrine\Common\Cache\FilesystemCache(
|
|
__DIR__ . '/cache'
|
|
)
|
|
);
|
|
|
|
$configureProviders = [
|
|
'redirectUri' => 'http://sconnect.local/auth/cb',
|
|
'provider' => [
|
|
'facebook' => [
|
|
'applicationId' => '',
|
|
'applicationSecret' => '',
|
|
'scope' => [
|
|
'email'
|
|
],
|
|
'fields' => [
|
|
'email'
|
|
]
|
|
],
|
|
]
|
|
];
|
|
|
|
$service = new \SocialConnect\Auth\Service(
|
|
$httpClient,
|
|
new \SocialConnect\Provider\Session\Session(),
|
|
$configureProviders
|
|
);
|
|
|
|
/**
|
|
* By default collection factory is null, in this case Auth\Service will create
|
|
* a new instance of \SocialConnect\Auth\CollectionFactory
|
|
* you can use custom or register another providers by CollectionFactory instance
|
|
*/
|
|
$collectionFactory = null;
|
|
|
|
$service = new \SocialConnect\Auth\Service(
|
|
$httpClient,
|
|
new \SocialConnect\Provider\Session\Session(),
|
|
$configureProviders,
|
|
$collectionFactory
|
|
);
|
|
```
|
|
|
|
Next create you loginAction:
|
|
|
|
```php
|
|
$providerName = 'facebook';
|
|
|
|
$provider = $service->getProvider($providerName);
|
|
header('Location: ' . $provider->makeAuthUrl());
|
|
```
|
|
|
|
And implement callback handler:
|
|
|
|
```php
|
|
$providerName = 'facebook';
|
|
|
|
$provider = $service->getProvider($providerName);
|
|
$accessToken = $provider->getAccessTokenByRequestParameters($_GET);
|
|
var_dump($accessToken);
|
|
|
|
$user = $provider->getIdentity($accessToken);
|
|
var_dump($user);
|
|
```
|
|
|
|
License
|
|
-------
|
|
|
|
This project is open-sourced software licensed under the MIT License.
|
|
|
|
See the [LICENSE](LICENSE) file for more information.
|