361
windows
在URL中包含簽名__訪問控製_API 參考_對象存儲 OSS-阿裏雲
除了使用Authorization Head,用戶還可以在URL中加入簽名信息,這樣用戶就可以把該URL轉給第三方實現授權訪問。
實現方式
URL簽名示例:
https://oss-example.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?AccessKeyId=AccessKeyId&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
URL簽名,必須至少包含Signature,Expires,AccessKeyId三個參數。
Expires
這個參數的值是一個UNIX時間(自UTC時間1970年1月1號開始的秒數,詳見wiki),用於標識該URL的超時時間。如果OSS接收到這個URL請求的時候晚於簽名中包含的Expires參數時,則返回請求超時的錯誤碼。例如:當前時間是1141889060,開發者希望創建一個60秒後自動失效的URL,則可以設置Expires時間為1141889120。AccessKeyId
即密鑰中的AccessKeyId。Signature
表示簽名信息。所有的OSS支持的請求和各種Header參數,在URL中進行簽名的算法和在Header中包含簽名的算法基本一樣。Signature = urlencode(base64(hmac-sha1(AccessKeySecret,
VERB + "n"
+ CONTENT-MD5 + "n"
+ CONTENT-TYPE + "n"
+ EXPIRES + "n"
+ CanonicalizedOSSHeaders
+ CanonicalizedResource)))
其中,與header中包含簽名相比主要區別如下:
- 通過URL包含簽名時,之前的Date參數換成Expires參數。
- 不支持同時在URL和Head中包含簽名。
- 如果傳入的Signature,Expires,OSSAccessKeyId出現不止一次,以第一次為準。
- 請求先驗證請求時間是否晚於Expires時間,然後再驗證簽名。
- 將簽名字符串放到url時,注意要對url進行urlencode
- 時臨時用戶URL簽名時,需要攜帶
security-token
,格式如下:https://oss-example.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?AccessKeyId=AccessKeyId&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D&security-token=SecurityToken
示例代碼
URL中添加簽名的python示例代碼:
import base64
import hmac
import sha
import urllib
h = hmac.new("OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV",
"GETnnn1141889120n/oss-example/oss-api.pdf",
sha)
urllib.quote (base64.encodestring(h.digest()).strip())
提示:
- 上麵為python的示例代碼
- OSS SDK中提供了提供URL簽名的方法,使用方法請參看SDK文件中的
授權訪問章節
章節- OSS SDK的URL簽名實現,請參看下表
SDK URL簽名方法 實現文件 Java SDK OSSClient.generatePresignedUrl OSSClient.java Python SDK Bucket.sign_url api.py .Net SDK OssClient.GeneratePresignedUri OssClient.cs PHP SDK OssClient.signUrl OssClient.php JavaScript SDK signatureUrl object.js C SDK oss_gen_signed_url oss_object.c
細節分析
- 使用在URL中簽名的方式,會將你授權的數據在過期時間以內曝露在互聯網上,請預先評估使用風險。
- PUT和GET請求都支持在URL中簽名。
- 在URL中添加簽名時,Signature,Expires,AccessKeyId順序可以交換,但是如果Signature,Expires,AccessKeyId缺少其中的一個或者多個,返回403 Forbidden。錯誤碼:AccessDenied。
- 如果訪問的當前時間晚於請求中設定的Expires時間,返回403 Forbidden。錯誤碼:AccessDenied。
- 如果Expires時間格式錯誤,返回403 Forbidden。錯誤碼:AccessDenied。
- 如果URL中包含參數Signature,Expires,AccessKeyId中的一個或者多個,並且Head中也包含簽名消息,返回消息400 Bad Request。錯誤碼:InvalidArgument。
- 生成簽名字符串時,除Date被替換成Expires參數外,仍然包含content-type、content-md5等上節中定義的Header。(請求中雖然仍然有Date這個請求頭,但不需要將Date加入簽名字符串中)
最後更新:2016-12-12 15:02:18
上一篇:
在Header中包含簽名__訪問控製_API 參考_對象存儲 OSS-阿裏雲
下一篇:
臨時授權訪問__訪問控製_API 參考_對象存儲 OSS-阿裏雲
JAVA-SDK__點播SDK_SDK手冊_視頻點播-阿裏雲
AccessKey__數據類型_RAM API文檔_訪問控製-阿裏雲
退款__購買指導_證書服務-阿裏雲
項目(Project)__基礎概念_用戶指南_日誌服務-阿裏雲
錯誤響應__圖片處理指南_對象存儲 OSS-阿裏雲
鑒權Action__OpenAPI RAM鑒權_OpenAPI 2.0_移動推送-阿裏雲
域名注冊流程__域名注冊_注冊續費_域名-阿裏雲
4.4 多計算引擎和Hint__第四章 DML_使用手冊_分析型數據庫-阿裏雲
示例一__快速開始_Quick BI-阿裏雲
查詢回源流量__資源監控接口_API 手冊_CDN-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲