Oauth
OAuth
在"客戶端"與"服務(wù)提供商"之間,設(shè)置了一個(gè)授權(quán)層(authorization layer)
。"客戶端"不能直接登錄"服務(wù)提供商",只能登錄授權(quán)層,以此將用戶與客戶端區(qū)分開(kāi)來(lái)。"客戶端"登錄授權(quán)層所用的令牌(token)
,與用戶的密碼不同。用戶可以在登錄的時(shí)候,指定授權(quán)層令牌的權(quán)限范圍和有效期。
需要用戶自行補(bǔ)充oauth的認(rèn)證流程,方便自己更加快速的接入。
安裝
請(qǐng)?jiān)?code>EasySwoole根目錄下執(zhí)行以下命令
composer require easyswoole/o-auth
詳情
根據(jù)Oauth
協(xié)議,分別有如下調(diào)用方法。
-
getAuthUrl()
獲取授權(quán)地址 -
getAccessToken($storeState = null, $state = null, $code = null)
獲取AccessToken(只返回access_token) -
getAccessTokenResult()
執(zhí)行getAccessToken
方法后,此方法獲取原結(jié)果 -
getUserInfo(string $accessToken)
獲取用戶信息 -
validateAccessToken(string $accessToken)
驗(yàn)證token是否有效 -
refreshToken(string $refreshToken = null)
刷新token 返回bool
-
getRefreshTokenResult()
執(zhí)行refreshToken
方法后,此方法獲取原結(jié)果
示例代碼
微信
class WeiXin extends \EasySwoole\Http\AbstractInterface\Controller
{
public function index()
{
$config = new \EasySwoole\OAuth\WeiXin\Config();
$config->setAppId('appid');
$config->setState('easyswoole');
$config->setRedirectUri('redirect_uri');
$oauth = new \EasySwoole\OAuth\WeiXin\OAuth($config);
$url = $oauth->getAuthUrl();
return $this->response()->redirect($url);
}
public function callback()
{
$params = $this->request()->getQueryParams();
$config = new \EasySwoole\OAuth\WeiXin\Config();
$config->setAppId('appid');
$config->setSecret('secret');
$config->setOpenIdMode(\EasySwoole\OAuth\WeiXin\Config::OPEN_ID); // 可設(shè)置UNION_ID 默認(rèn)為OPEN_ID
$oauth = new \EasySwoole\OAuth\WeiXin\OAuth($config);
$accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
$refreshToken = $oauth->getAccessTokenResult()['refresh_token'];
$userInfo = $oauth->getUserInfo($accessToken);
var_dump($userInfo);
if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗(yàn)證失敗!' . PHP_EOL;
if (!$oauth->refreshToken($refreshToken)) echo 'access_token 續(xù)期失敗!' . PHP_EOL;
}
}
class QQ extends \EasySwoole\Http\AbstractInterface\Controller
{
public function index()
{
$config = new \EasySwoole\OAuth\QQ\Config();
$config->setAppId('appid');
$config->setState('easyswoole');
$config->setRedirectUri('redirect_uri');
$oauth = new \EasySwoole\OAuth\QQ\OAuth($config);
$url = $oauth->getAuthUrl();
return $this->response()->redirect($url);
}
public function callback()
{
$params = $this->request()->getQueryParams();
$config = new \EasySwoole\OAuth\QQ\Config();
$config->setAppId('appid');
$config->setAppKey('appkey');
$config->setRedirectUri('redirect_uri');
$config->setOpenIdMode(\EasySwoole\OAuth\QQ\Config::OPEN_ID); // 可設(shè)置UNION_ID 默認(rèn)為OPEN_ID
$oauth = new \EasySwoole\OAuth\QQ\OAuth($config);
$accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
$refreshToken = $oauth->getAccessTokenResult()['refresh_token'];
$userInfo = $oauth->getUserInfo($accessToken);
var_dump($userInfo);
if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗(yàn)證失敗!' . PHP_EOL;
if (!$oauth->refreshToken($refreshToken)) echo 'access_token 續(xù)期失敗!' . PHP_EOL;
}
}
微博
class Weibo extends \EasySwoole\Http\AbstractInterface\Controller
{
public function index()
{
$config = new \EasySwoole\OAuth\Weibo\Config();
$config->setClientId('clientid');
$config->setState('easyswoole');
$config->setRedirectUri('redirect_uri');
$oauth = new \EasySwoole\OAuth\Weibo\OAuth($config);
$url = $oauth->getAuthUrl();
return $this->response()->redirect($url);
}
public function callback()
{
$params = $this->request()->getQueryParams();
$config = new \EasySwoole\OAuth\Weibo\Config();
$config->setClientId('clientid');
$config->setClientSecret('secret');
$config->setRedirectUri('redirect_uri');
$oauth = new \EasySwoole\OAuth\Weibo\OAuth($config);
$accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
$userInfo = $oauth->getUserInfo($accessToken);
var_dump($userInfo);
if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗(yàn)證失敗!' . PHP_EOL;
}
}
支付寶
class AliPay extends \EasySwoole\Http\AbstractInterface\Controller
{
public function index()
{
$config = new \EasySwoole\OAuth\AliPay\Config();
$config->setState('easyswoole');
$config->setAppId('appid');
$config->setRedirectUri('redirect_uri');
// 使用沙箱環(huán)境測(cè)試開(kāi)發(fā)的時(shí)候 把OAuth的源碼文件里面的 API_DOMAIN 和 AUTH_DOMAIN 進(jìn)行修改
$oauth = new \EasySwoole\OAuth\AliPay\OAuth($config);
$url = $oauth->getAuthUrl();
return $this->response()->redirect($url);
}
public function callback()
{
$params = $this->request()->getQueryParams();
$config = new \EasySwoole\OAuth\AliPay\Config();
$config->setAppId('appid');
// $config->setAppPrivateKey('私鑰');
$config->setAppPrivateKeyFile('私鑰文件'); // 私鑰文件(非遠(yuǎn)程) 此方法與上個(gè)方法二選一
$oauth = new \EasySwoole\OAuth\AliPay\OAuth($config);
$accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['auth_code']);
$refreshToken = $oauth->getAccessTokenResult()['alipay_system_oauth_token_response']['refresh_token'];
$userInfo = $oauth->getUserInfo($accessToken);
var_dump($userInfo);
if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗(yàn)證失敗!' . PHP_EOL;
var_dump($oauth->getAccessTokenResult());
if (!$oauth->refreshToken($refreshToken)) echo 'access_token 續(xù)期失敗!' . PHP_EOL;
var_dump($oauth->getRefreshTokenResult());
}
}
Github
class Github extends \EasySwoole\Http\AbstractInterface\Controller
{
public function index()
{
$config = new \EasySwoole\OAuth\Github\Config();
$config->setClientId('clientid');
$config->setRedirectUri('redirect_uri');
$config->setState('easyswoole');
$oauth = new \EasySwoole\OAuth\Github\OAuth($config);
$this->response()->redirect($oauth->getAuthUrl());
}
public function callback()
{
$params = $this->request()->getQueryParams();
$config = new \EasySwoole\OAuth\Github\Config();
$config->setClientId('clientid');
$config->setClientSecret('secret');
$config->setRedirectUri('redirect_uri');
$oauth = new \EasySwoole\OAuth\Github\OAuth($config);
$accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
$userInfo = $oauth->getUserInfo($accessToken);
var_dump($userInfo);
if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗(yàn)證失敗!' . PHP_EOL;
}
}
Gitee
class Gitee extends \EasySwoole\Http\AbstractInterface\Controller
{
public function index()
{
$config = new \EasySwoole\OAuth\Gitee\Config();
$config->setState('easyswoole');
$config->setClientId('clientid');
$config->setRedirectUri('redirect_uri');
$oauth = new \EasySwoole\OAuth\Gitee\OAuth($config);
$this->response()->redirect($oauth->getAuthUrl());
}
public function callback()
{
$params = $this->request()->getQueryParams();
$config = new \EasySwoole\OAuth\Gitee\Config();
$config->setClientId('client_id');
$config->setClientSecret('secret');
$config->setRedirectUri('redirect_uri');
$oauth = new \EasySwoole\OAuth\Gitee\OAuth($config);
$accessToken = $oauth->getAccessToken('easyswoole', $params['state'], $params['code']);
$userInfo = $oauth->getUserInfo($accessToken);
var_dump($userInfo);
if (!$oauth->validateAccessToken($accessToken)) echo 'access_token 驗(yàn)證失敗!' . PHP_EOL;
var_dump($oauth->getAccessTokenResult());
}
}