BOS签名算法的PHP demo

BOS签名算法的PHP demo

为什么要写这篇文档,大多数的用户肯定深有体会,就是BCE的那套API文档太晦涩了,亲们,没图没demo啊,有么有?

既然有PHP SDK了,为什么还要写这个签名算法?因为我只会点PHP,签名算法的思路是一样的,只要PHP的demo出来了,C#的还难吗?IOS的还难吗?下面我就结合demo,来讲一下这个认证字符串到底该怎么生成。以码农的思维,咱们就拿代码来说事,不说那一大堆解释了,各位看官看注释就好了。

开放云的签名步骤大致就下面几步:

  1. 确定AK,SK

  2. 明确host

  3. 生成signKey

  4. 明确这次请求的相对URL路径和方法(GET/POST/PUT)

  5. 明确这次请求所需要的header

  6. 生成CanoncialRequest字符串:由三部分构成,CanoncialURL,CanoncialQueryString和CaoncialHeader。

  7. 生成最终签名

  8. 生成认证字符串

     <?php
     
     /*
     生成UTC时间,默认是当前时间。比如说现在北京时间是2015/10/23 16:48:00.
     那么对应的UTC时间就是当前时间减8小时,也就是2015/10/23 8:48:00
     这里最终时间的格式是:2015-10-23T08:48:00Z
     */
     date_default_timezone_set('UTC');
     $timestamp = date("Y-m-d")."T".date("H:i:s")."Z";
     print $timestamp."\n";
    
     $AK = " ";
     $SK = " ";
    
     $expirationPeriodInSeconds = "3600";
     
     /*
     这里要生成signKey,生成signKey需要是将bce-auth-v1+AK+timestamp+过期时间拼接起来形成authStringPrefix.
     然后用签名中使用的HASH算法(HMAC SHA256)将刚才拼接的authStringPrefix和SK签一遍,打印出来signKey。
     */
     $authStringPrefix = "bce-auth-v1"."/".$AK."/".$timestamp."/".$expirationPeriodInSeconds;
     print $authStringPrefix."\n";
    
     $SigningKey=hash_hmac('SHA256',$authStringPrefix,$SK);
     print $SigningKey."\n";
    
     /*
     对于GET请求,建议header里只需要加入host;如果是PUT请求,建议header里添加host和x-bce-date.如果你的header
     里还要加Content-lenth,Content-Type等,要将得到的字符串组按照字典序排序用换行符\n连接起来。
     为了以后拼接方便,创建了header1,header2是将时间进行规范化字符串处理过的,这才是实际Canoncial
     中需要的。
     */
     $CanonicalHeaders1 = "host;"."x-bce-date";
     $CanonicalHeaders2 = "host:bj.bcebos.com\n"."x-bce-date:".urlencode($timestamp);
    
     //可以没有CanoncialString,也就是这一项为空
     $CanonicalString = "";
    
     /*
     当请求是http://bj.bcebos.com/v1/zxdtestbae/image.jpg的时候,CanoncialURL就是下面的/v1/zxdtestbae/
     image.jpg
     */
     $CanonicalURI = "/v1/zxdtestbae/image.jpg"; 
    
     /*CanoncialRequest由请求方法(GET,PUT或者POST), CanoncialURL,CanoncialHeaders组成。*/
     $CanonicalRequest = "PUT\n".$CanonicalURI."\n".$CanonicalString."\n".$CanonicalHeaders2;    //第二步
     print $CanonicalRequest."\n";
    
     /*使用 HMACSHA256 算法,SignKey,CanonicalRequest 生成最终签名*/
     $Signature = hash_hmac('SHA256',$CanonicalRequest,$SigningKey);
     print $Signature."\n";
     
     /*
     生成认证字符串,认证字符串的格式为:
     bce-auth-v1/{AK}/{timestamp}/{expirationPeriodInSeconds}/{CanonicalHeaders1}/{signature}
     */
     $Authorization = "bce-auth-v1/{$AK}/".$timestamp."/{$expirationPeriodInSeconds}/{$CanonicalHeaders1}/{$Signature}";
    
     print $Authorization."\n";
     ?>
    

最终打印出来的就是:

2015-10-23T10:31:17Z

bce-auth-v1/60b4a945e0202a7246ef39525f491b26/2015-10-23T10:31:17Z/3600/ed0497f58088fb9433f3375260c468510be2d6e4f94a21484b23b63efd4d2766

PUT
/v1/zxdtestbae/image.jpg

host:bj.bcebos.com
x-bce-date:2015-10-23T10%3A31%3A17Z
4ee1a806ca947985018e9591d70561e829274b22ca626c9c92d7f2ac370afea6
bce-auth-v1/60b4a945e0202a7246ef39525f491b26/2015-10-23T10:31:17Z/3600/host;x-bce-date/4ee1a806ca947985018e9591d70561e829274b22ca626c9c92d7f2ac370afea6

这里给大家推荐一个比较好用的火狐插件Httprequester:

Paste_Image.png

只需要在Headers里填入你刚才算出来的Authorization,host和x-bce-date。URL中填入你请求的路径。

Paste_Image.png

Content to Send那一项选择你要上传的文件。然后直接点击submit就可以了。看到右边的状态码是200就成功了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容