76 lines
1.9 KiB
PHP
Raw Normal View History

<?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);
}
}
}
}