七牛云rs.php位置,七牛云存储PHP生成管理凭证以及查看文件(state)

本文详细介绍了如何生成和使用七牛云存储的管理凭证(AccessToken)进行请求验证。内容包括签名字符串的构建、HMAC-SHA1签名计算、URL安全Base64编码以及代码示例,确保在业务服务器端安全地使用AccessKey和SecretKey。
摘要由CSDN通过智能技术生成

管理凭证(Access Token)是七牛云存储用于验证管理请求合法性的机制。官方建议仅在业务服务器端使用这一类凭证,避免意外授权导致滥用。凭证算法生成待签名的原始字符串:

抽取请求URL中或?的部分与请求内容部分(即HTTP Body),用“n”连接起来。

如无请求内容,该部分必须为空字符串。

注意:当Content-Type为application/x-www-form-urlencoded时,签名内容必须包括请求内容(即HTTP Body)。signingStr = "?\n"

signingStr = "?\n"使用SecertKey对上一步生成的原始字符串计算HMAC-SHA1签名:

sign = hmac_sha1(signingStr, "")

对签名进行[URL安全的Base64编码]:encodedSign = urlsafe_base64_encode(sign)最后,将AccessKey和encodedSign用:连接起来:accessToken = ":"计算示例

假设有如下的管理请求:AccessKey = "MY_ACCESS_KEY"

SecretKey = "MY_SECRET_KEY"

url = "http://rs.qiniu.com/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ="

则待签名的原始字符串是:signingStr = "/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ=\n"

签名字符串是:

注意:签名结果是二进制数据,此处输出的是每个字节的十六进制表示,以便核对检查。这里要注意,后面还会提到sign = "157b18874c0a1d83c4b0802074f0fd39f8e47843"

编码后的签名字符串是:encodedSign = "FXsYh0wKHYPEsIAgdPD9OfjkeEM="

最终的管理凭证是:accessToken = "MY_ACCESS_KEY:FXsYh0wKHYPEsIAgdPD9OfjkeEM="查看StatGET /stat/ZGVtbzoyMDEzLTAyLTA5LTA3LTM5LTIwLmpwZw== HTTP/1.1

User-Agent: curl/7.30.0

Host: rs.qiniu.com

Accept: */*

Authorization: QBox QNJi_bYJlmO5LeY08FfoNj9w_r72Vsn...(过长已省略)返回结果{

"fsize": 5122935,

"hash": "ljfockr0lOil_bZfyaI2ZY78HWoH",

"mimeType": "application/octet-stream",

"putTime": 13603956734587420

}代码示例$app_info = http://bucket_domain/key;

function get_state($app_info, $qiniu_bucket, $qiniu_access_key, $qiniu_secret_key)

{

$encodedEntryURI = base64_urlSafeEncode($qiniu_bucket.':'.trim(parse_url($app_info, PHP_URL_PATH), "/"));

$signingStr = "/stat/".$encodedEntryURI."\n";

$sign = hash_hmac('sha1', $signingStr, $qiniu_secret_key, TRUE);

// $sign = mhash(MHASH_SHA1, $signingStr, $qiniu_secret_key); //这样也可以

$encodedSign = base64_urlSafeEncode($sign);

$accessToken = $qiniu_access_key.':'.$encodedSign;

$res = curl_get('http://rs.qiniu.com/stat/'.$encodedEntryURI, 'QBox '.$accessToken); //添加`QBox`和半角空格和

return $res;

}

function curl_get($url, $post=array(), $auth='', $timeout=10)

{

$g_handle = curl_init();

$header[] = "Authorization: $auth";

$options = array(

CURLOPT_HTTPHEADER => $header,

CURLOPT_URL => $url,

CURLOPT_POST => false,

CURLOPT_RETURNTRANSFER => true,

CURLOPT_FRESH_CONNECT => false,

CURLOPT_FORBID_REUSE => false,

CURLOPT_TIMEOUT => $timeout,

CURLOPT_POSTFIELDS => http_build_query($post)

);

if(empty($post)) $options[CURLOPT_POST] = false;

curl_setopt_array($g_handle, $options);

$ret = curl_exec($g_handle);

return $ret;

}说明

hash_hmac 函数string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )

使用 HMAC 方法生成带有密钥的哈希值,如果 raw_output 设置为 TRUE, 则返回原始二进制数据表示的信息摘要, 否则返回 16 进制小写字符串格式表示的信息摘要。 如果 algo 参数指定的不是受支持的算法,返回 FALSE。

URL安全的Base64编码URL安全的Base64编码适用于以URL方式传递Base64编码结果的场景。该编码方式的基本过程是先将内容以Base64格式编码为字符串,然后检查该结果字符串,将字符串中的加号+换成中划线-,并且将斜杠/换成下划线_,同时尾部保持填充等号=。/**

* 对提供的数据进行urlsafe的base64编码。

*

* @param string $data 待编码的数据,一般为字符串

*

* @return string 编码后的字符串

* @link http://developer.qiniu.com/docs/v6/api/overview/appendix.html#urlsafe-base64

*/

function base64_urlSafeEncode($data)

{

$find = array('+', '/');

$replace = array('-', '_');

return str_replace($find, $replace, base64_encode($data));

}[尚无相关文章]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值