76 lines
1.9 KiB
PHP
76 lines
1.9 KiB
PHP
<?php
|
||
|
||
namespace app\api\controller\openapi;
|
||
|
||
use app\common\controller\Api;
|
||
|
||
class Base extends Api
|
||
{
|
||
protected $noNeedLogin = '*';
|
||
protected $noNeedRight = '*';
|
||
|
||
protected $decrypt_data = [];
|
||
|
||
|
||
|
||
/**
|
||
* 初始化操作
|
||
* @access protected
|
||
*/
|
||
protected function _initialize()
|
||
{
|
||
parent::_initialize();
|
||
|
||
$this->checkToken();
|
||
|
||
|
||
|
||
}
|
||
public function checkToken()
|
||
{
|
||
// token
|
||
$key = $this->request->param('key/s',"");
|
||
$encryption_data = $this->request->param('encryption_data/s',"");
|
||
$sign = $this->request->param('sign/s',"");
|
||
if (!$encryption_data) {
|
||
$this->error('异常的调用');
|
||
}
|
||
//根据key查询公钥库
|
||
$public_key = \app\common\model\auth\api\Key::where('key', $key)->value("public_key");
|
||
if (!$public_key) {
|
||
$this->error('非法访问!');
|
||
}
|
||
$decrypted = '';
|
||
if (!openssl_public_decrypt(base64_decode($sign), $decrypted, $public_key)) {
|
||
$this->error('非法访问!');
|
||
}
|
||
$sign_data = json_decode($decrypted, true);
|
||
//取出时间戳
|
||
$timestamp = $sign_data['timestamp'];
|
||
//授权有效时间只有3分钟
|
||
if (time() - $timestamp > 180) {
|
||
$this->error('授权已过期');
|
||
}
|
||
//公钥解密加密数据
|
||
if($encryption_data){
|
||
$decrypt_data = '';
|
||
if (!openssl_public_decrypt(base64_decode($encryption_data), $decrypt_data, $public_key)) {
|
||
$this->error('非法访问!');
|
||
}
|
||
$this->decrypt_data = json_decode($decrypt_data, true);
|
||
|
||
//如果有当前服务器的token,塞入当前服务,重新加载父类_initialize方法
|
||
if(!empty($this->decrypt_data['token'])){
|
||
$token = $this->decrypt_data['token'];
|
||
$this->auth->init($token);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
} |