From d5525a31aa9e536ddd78acbe7b1ca1762a302b6f Mon Sep 17 00:00:00 2001 From: carsonxu <459452372@qq.com> Date: Wed, 26 Dec 2018 17:46:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20sts=20=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/sts.php | 141 +++++++++++-------------------------------------- 1 file changed, 31 insertions(+), 110 deletions(-) diff --git a/server/sts.php b/server/sts.php index ce5624e..8ef7a3d 100644 --- a/server/sts.php +++ b/server/sts.php @@ -3,14 +3,26 @@ // 配置参数 $config = array( - 'Url' => 'https://sts.api.qcloud.com/v2/index.php', - 'Domain' => 'sts.api.qcloud.com', - 'Proxy' => '', - 'SecretId' => 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 固定密钥 - 'SecretKey' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 固定密钥 - 'Bucket' => 'test-1250000000', - 'Region' => 'ap-guangzhou', - 'AllowPrefix' => '_ALLOW_DIR_/*', // 必填,这里改成允许的路径前缀,这里可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg + 'url' => 'https://sts.api.qcloud.com/v2/index.php', + 'domain' => 'sts.api.qcloud.com', + 'proxy' => '', + 'secretId' => 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 固定密钥 + 'secretKey' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 固定密钥 + 'bucket' => 'test-1250000000', // 换成你的 bucket + 'region' => 'ap-guangzhou', // 换成 bucket 所在园区 + 'durationSeconds' => 1800, // 密钥有效期 + 'allowPrefix' => '*', // 必填,这里改成允许的路径前缀,这里可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg + // 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/14048 + 'allowActions' => array ( + // 简单上传 + 'name/cos:PutObject', + // 分片上传 + 'name/cos:InitiateMultipartUpload', + 'name/cos:ListMultipartUploads', + 'name/cos:ListParts', + 'name/cos:UploadPart', + 'name/cos:CompleteMultipartUpload' + ) ); function _hex2bin($data) { @@ -31,7 +43,7 @@ function json2str($obj, $notEncode = false) { // 计算临时密钥用的签名 function getSignature($opt, $key, $method) { global $config; - $formatString = $method . $config['Domain'] . '/v2/index.php?' . json2str($opt, 1); + $formatString = $method . $config['domain'] . '/v2/index.php?' . json2str($opt, 1); $sign = hash_hmac('sha1', $formatString, $key); $sign = base64_encode(_hex2bin($sign)); return $sign; @@ -41,108 +53,17 @@ function getSignature($opt, $key, $method) { function getTempKeys() { global $config; - - // 判断是否修改了 AllowPrefix - if ($config['AllowPrefix'] === '_ALLOW_DIR_/*') { - return array('error'=> '请修改 AllowPrefix 配置项,指定允许上传的路径前缀'); - } - - $ShortBucketName = substr($config['Bucket'],0, strripos($config['Bucket'], '-')); - $AppId = substr($config['Bucket'], 1 + strripos($config['Bucket'], '-')); + $ShortBucketName = substr($config['bucket'],0, strripos($config['bucket'], '-')); + $AppId = substr($config['bucket'], 1 + strripos($config['bucket'], '-')); $policy = array( 'version'=> '2.0', 'statement'=> array( array( - 'action'=> array( - // // 所有操作 - // 'name/cos:*', - - // // 列出 Bucket 列表 - // 'name/cos:GetService', - // // Bucket ACL 读写 - // 'name/cos:GetBucketACL', - // 'name/cos:PutBucketACL', - // // Object ACL 读写 - // 'name/cos:GetObjectACL', - // 'name/cos:PutObjectACL', - // // Policy 权限策略 - // 'name/cos:PutBucket', - // 'name/cos:HeadBucket', - // 'name/cos:GetBucket', - // 'name/cos:GetBucketObjectVersions', - // 'name/cos:DeleteBucket', - // 'name/cos:GetBucketLocation', - // // Policy 权限策略 - // 'name/cos:GetBucketPolicy', - // 'name/cos:PutBucketPolicy', - // 'name/cos:DeleteBucketPolicy', - // // Versioning 多版本配置 - // 'name/cos:PutBucketVersioning', - // 'name/cos:GetBucketVersioning', - // // CORS 跨域配置 - // 'name/cos:PutBucketCORS', - // 'name/cos:GetBucketCORS', - // 'name/cos:DeleteBucketCORS', - // // Lifecycle 生命周期 - // 'name/cos:PutBucketLifecycle', - // 'name/cos:GetBucketLifecycle', - // 'name/cos:DeleteBucketLifecycle', - // // Replication 跨区域复制 - // 'name/cos:PutBucketReplication', - // 'name/cos:GetBucketReplication', - // 'name/cos:DeleteBucketReplication', - // // Tagging 标签 - // 'name/cos:PutBucketTagging', - // 'name/cos:GetBucketTagging', - // 'name/cos:DeleteBucketTagging', - // // Referer 防盗链 - // 'name/cos:GetBucketReferer', - // 'name/cos:PutBucketReferer', - // 'name/cos:DeleteBucketReferer', - // // Origin 源站设置 - // 'name/cos:GetBucketOrigin', - // 'name/cos:PutBucketOrigin', - // 'name/cos:DeleteBucketOrigin', - // // Website 静态网站 - // 'name/cos:GetBucketWebsite', - // 'name/cos:DeleteBucketWebsite', - // 'name/cos:PutBucketWebsite', - // // Logging 日志记录 - // 'name/cos:GetBucketLogging', - // 'name/cos:PutBucketLogging', - // // Logging 日志记录 - // 'name/cos:GetBucketNotification', - // 'name/cos:PutBucketNotification', - // // 删除文件 - // 'name/cos:DeleteMultipleObjects', - // 'name/cos:DeleteObject', - // 'name/cos:AbortMultipartUpload', - // // 复制文件或分片 - // 'name/cos:PutObjectCopy', - // 'name/cos:UploadPartCopy', - // // 取回归档 - // 'name/cos:PostObjectRestore', - // // 读取文件 - // 'name/cos:HeadObject', - // 'name/cos:GetObject', - // 'name/cos:OptionsObject', - // // 上传操作 - // 'name/cos:PostObject', - // 'name/cos:AppendObject', - // 简单上传 - 'name/cos:PutObject', - // 分片上传操作 - 'name/cos:InitiateMultipartUpload', - 'name/cos:ListMultipartUploads', - 'name/cos:ListParts', - 'name/cos:UploadPart', - 'name/cos:CompleteMultipartUpload', - ), + 'action'=> $config['allowActions'], 'effect'=> 'allow', 'principal'=> array('qcs'=> array('*')), 'resource'=> array( - 'qcs::cos:' . $config['Region'] . ':uid/' . $AppId . ':prefix//' . $AppId . '/' . $ShortBucketName . '/', - 'qcs::cos:' . $config['Region'] . ':uid/' . $AppId . ':prefix//' . $AppId . '/' . $ShortBucketName . '/' . $config['AllowPrefix'] + 'qcs::cos:' . $config['region'] . ':uid/' . $AppId . ':prefix//' . $AppId . '/' . $ShortBucketName . '/' . $config['allowPrefix'] ) ) ) @@ -156,19 +77,19 @@ function getTempKeys() { $params = array( 'Region'=> 'gz', - 'SecretId'=> $config['SecretId'], + 'SecretId'=> $config['secretId'], 'Timestamp'=> $Timestamp, 'Nonce'=> $Nonce, 'Action'=> $Action, - 'durationSeconds'=> 7200, + 'durationSeconds'=> $config['durationSeconds'], 'name'=> 'cos', 'policy'=> urlencode($policyStr) ); - $params['Signature'] = getSignature($params, $config['SecretKey'], $Method); + $params['Signature'] = getSignature($params, $config['secretKey'], $Method); - $url = $config['Url']; + $url = $config['url']; $ch = curl_init($url); - $config['Proxy'] && curl_setopt($ch, CURLOPT_PROXY, $config['Proxy']); + $config['proxy'] && curl_setopt($ch, CURLOPT_PROXY, $config['proxy']); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0); @@ -182,7 +103,7 @@ function getTempKeys() { $result = json_decode($result, 1); if (isset($result['data'])) { $result = $result['data']; - $result['startTime'] = $Timestamp; + $result['startTime'] = $result['expiredTime'] - $config['durationSeconds']; } return $result;