OSS上傳回撥支援自定義header以及v2版本簽名
上傳回撥(callback)是OSS的一個重要功能,可以應用在客戶端與伺服器端資料同步等一些場景。上傳回撥功能支援在回撥的body中傳入資訊,但是在一些場景下,使用者希望能夠在回撥給應用伺服器的請求header中傳入自定義的header,用於滿足伺服器端的一些特殊需求。因此OSS在callback現有功能基礎上支援了自定義header,並加強了簽名演算法,將header加入了簽名中,支援v2版本簽名,增強了安全性。
如果對上傳回撥功能不瞭解,請先閱讀此文件https://help.aliyun.com/document_detail/31989.html?spm=5176.doc31853.2.5.2lI4WS
一、傳入引數的變化
callback功能是通過x-oss-callback這個header傳入的引數來指定。這個header的value格式詳細參考https://help.aliyun.com/document_detail/31989.html?spm=5176.doc31853.2.5.2lI4WS,在這個結構基礎上,新增了兩個欄位,用於支援自定義header和v2版本簽名。詳細介紹如下:
欄位 |
說明 |
示例 |
signatureVersion |
可選,預設值是“1.0”。目前支援的值是“1.0”和“2.0”,“1.0”指預設的簽名演算法,“2.0”指本文描述的簽名演算法 |
“signatureVersion” : |
additionalHeaders |
可選,是一個map,表示OSS回撥給使用者的自定義header,除了“x-oss-”開頭的header以及額外保留的header外,其餘header都可以傳遞,最大支援10個自定義header,自定義header的key只允許數字橫槓以及小寫字母。保留的header如下: Content-Type Content-Length Host Authorization User-Agent Content-Md5 Expect Upgrade Keep-Alive |
“additionalHeaders” : { } |
下面是一個完整的例子:
{ } |
二、接收到的請求的變化
如果指定了自定義header以及v2版本簽名,應用伺服器接收到的請求中以下header將會增加或者變動:
header |
說明 |
示例 |
使用者指定的自定義header |
使用者通過additionalHeaders欄位指定的header都會體現在回撥請求中 |
“my-header”:”abc” “any-header”:”def” |
x-oss-additional-headers |
這個欄位的內容是使用者傳入的自定義header的key列表,以逗號分隔 |
x-oss-additional-headers:any-header,my-header |
x-oss-signature-version |
預設是”1.0”,如果指定用v2版本簽名,值會相應的變為”2.0” |
x-oss-signature-version:2.0 |
比如上例的callback請求,應用伺服器將會收到以下POST請求:
POST / HTTP/1.1 Host: www.test.com Connection: close Content-Length: 13 any-header: def Authorization: PN7y979+gYNtSdJzEhdYnz/GCSUFF1L/SY6a6kvdy326A2JDryBjZj4sbAq3JVjTydngi4CihGfrq0V7pzZJKQ== Content-MD5: /ddPByElLVc6RX1St8jL+Q== Content-Type: Date: Tue, 31 Oct 2017 01:58:58 GMT my-header: abc User-Agent: aliyun-oss-callback x-oss-additional-headers: x-oss-bucket: guoping-file x-oss-owner: 1517986058650554 x-oss-pub-key-url: x-oss-request-id: x-oss-requester: 1517986058650554 x-oss-signature-version: 2.0 x-oss-tag: CALLBACK
just for test |
三、v2版本簽名演算法
v1版本的簽名演算法只是將uri和body加到了簽名中,由於OSS本身會傳遞一些以x-oss-開頭的header,而且使用者可能會自定義一些header,都需要加入到簽名中,因此oss支援了v2版本的簽名。v2版本簽名演算法與v1版本唯一不同的地方是待簽名字串的組織方式不一樣,其他比如使用RSA演算法都保持一致。
v2版本待簽名字串的組織方式如下:
StrToSign = “POST” + “ |
注:
1、Content-Md5。即Content-MD5頭的值,比如上例為” /ddPByElLVc6RX1St8jL+Q==”,這個header按照標準的協議生成,可以用於驗證body是否被篡改,因此v2版本的簽名將此header籤進去,並不再將body籤進去。
2、Content-Type。即Content-Type頭的值,上例為” application/x-www-form-urlencoded”
3、Date。即Date頭的值,上例為” Tue,
31 Oct 2017 01:58:58 GMT”。
4、headers。包括使用者自定義的header以及x-oss-開頭的header。包括兩個部分:
1) 由自定義header以及x-oss-開頭的header按照key的小寫字典序排列的key
value對,按照ToLower(key) + “:” + value + “
”的方式一一加入到待簽名字串中。
2) 自定義header的key按照字典序排列後用”;”連線,最後再加上”
”後加入到待簽名字串中。
5、uri。即回撥的uri,需要注意的是需要做url編碼。
6、queryString。將請求引數按照字典序排列,然後按照UrlEncode(key) + “=” + UrlEncode(value)的方式組織成一個單元,每一個單元再用”&”連線後,加入到”?”後面組成一個新的字串,需要注意的是,如果請求引數中的key有重複,需要將重複的key和value都新增到待簽名字串中。如果沒有請求引數,則不需要加此項
生成待簽名字串後,剩下的就與v1版本相同,即authorization = base64_encode(rsa_sign(private_key, StrToSign, md5)),生成的簽名與v1版本一樣放在authorization頭中。
四、示例
下面以一個簡單的python版本的應用伺服器,來演示自定義header以及v2版本簽名的使用。
執行附件的應用伺服器示例程式碼,python2.7 callback_app_server.py,注意需要安裝M2Crypto庫。按照上例給出的x-oss-callback引數發起callback請求(將其中的callbackUrl改成你實際執行callback_app_server.py的地址和埠),即可回撥成功。有任何問題,歡迎加入釘釘群(11799757)溝通交流。
相關文章
- 阿里雲 OSS 簽名上傳(結合 elementUI)阿里UI
- 前端自定義類事件回撥封裝前端事件封裝
- 基於node.js和oss的後端簽名直傳Node.js後端
- Node分片上傳和OSS上傳
- axios自帶的上傳進度回撥函式iOS函式
- jquery星級評分外掛(支援各種回撥函式、自定義配置、只讀模式、最大星級等)jQuery函式模式
- Vue + Element 自定義上傳封面元件Vue元件
- Docker自定義映象上傳阿里雲Docker阿里
- 自定義JSON名JSON
- OSS網頁上傳和斷點續傳(OSS配置篇)網頁斷點
- android 阿里雲oss上傳Android阿里
- Aliyun Oss 上傳檔案
- phpstudy自定義版本PHP
- Typora中自定義命令上傳圖片
- Flutter - Drawer 抽屜檢視與自定義headerFlutterHeader
- setInterval 回撥函式傳引數函式
- Jni CallVoidMethod回撥傳值不正確
- Bytom Java版本離線簽名Java
- canvas簽名圖片上傳及入庫問題Canvas
- Android V1及V2簽名原理簡析Android
- Java 新增數字簽名到Excel以及檢測、刪除簽名JavaExcel
- 阿里雲物件儲存OSS支援版本管理特性阿里物件
- 回撥函式的作用與意義函式
- jquery阿里雲oss 分片上傳jQuery阿里
- 自定義檔案上傳功能實現方法
- 自定義上傳圖片拼圖遊戲遊戲
- 再遇CORS -- 自定義HTTP header的導致跨域CORSHTTPHeader跨域
- jmeter 引數簽名不支援 TreeMapJMeter
- TarsGo新版本釋出,支援protobuf,zipkin和自定義外掛Go
- 「Goravel 上新」同時支援 Local, OSS, COS, S3的檔案儲存模組,還支援自定義,想存哪裡存哪裡!GoS3
- iOS應用簽名(上)iOS
- Git 2.18版本已支援Git協議v2Git協議
- vue 阿里雲oss下載檔案,自定義命名Vue阿里
- drf-jwt原始碼分析以及自定義token簽發認證、alc和rbacJWT原始碼
- apisix~自定義檔案上傳代理外掛~支援form-data檔案和kv引數APIORM
- 自定義版本更新彈窗
- 飛冰:Iceworks 自定義模板支援佈局定製(v2.3.0 版本)
- 使用AVPlayer自定義支援全屏的播放器(五)—Swift重構版本播放器Swift
- Android Studio生成簽名檔案,自動簽名,以及獲取SHA1和Android