Skip to content

Commit

Permalink
修改 sts 例子
Browse files Browse the repository at this point in the history
  • Loading branch information
carsonxu committed Dec 26, 2018
1 parent d83e117 commit d5525a3
Showing 1 changed file with 31 additions and 110 deletions.
141 changes: 31 additions & 110 deletions server/sts.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
Expand All @@ -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']
)
)
)
Expand All @@ -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);
Expand All @@ -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;
Expand Down

0 comments on commit d5525a3

Please sign in to comment.