摘要:通常我們將此過程稱為簽署請求并且我們將輸出算法稱為簽名,因為它會模擬真實簽名的安全屬性。查詢字符串請求身份驗證方法與普通的方法稍有差異,不同之處僅在于請求參數和元素的格式。請注意,在中,位置元素已替換為。
US3 REST API 基于 HMAC(哈希消息身份驗證碼)密鑰使用自定義 HTTP 方案進行身份驗證。要對請求進行身份驗證,您首先需要合并請求的選定元素以形成一個字符串。然后,您可以使用 UCloud 私有訪問密鑰來計算該字符串的 HMAC。通常我們將此過程稱為“簽署請求”并且我們將輸出 HMAC 算法稱為“簽名”,因為它會模擬真實簽名的安全屬性。最后,您可以使用本部分中介紹的語法,作為請求的參數添加此簽名。
系統收到經身份驗證的請求時,將提取您申領的 UCloud 私有訪問密鑰,并以相同的使用方式將它用于計算已收到的消息的簽名。然后,它會將計算出的簽名與請求者提供的簽名進行對比。如果兩個簽名相匹配,則系統認為請求者必須擁有對 UCloud 私有訪問密鑰的訪問權限,因此充當向其頒發密鑰的委托人的頒發機構。如果兩個簽名不匹配,那么請求將被丟棄,同時系統將返回錯誤消息。
基于以上的原理,我們對空間管理和文件管理兩套接口提供兩種原理一樣但是細節不同的鑒權過程。
賬戶的公私鑰可以在 UCloud 控制臺中 API 產品 - API 密鑰,點擊顯示 API 密鑰獲取。
空間管理的簽名使用查詢字符串的簽名方式,客戶端通過把簽名字段作為一個 query 字段傳遞給服務端請求授權驗證。攜帶了簽名(Signature)的創建空間請求具有如下的格式:
GET /Type=public&BucketName=demobucket&PublicKey=uclouddemo@mail.com45207436768156091&Action=CreateBucket&Signature=13f7989d4a5a8ued83c0e57ah43b3607bc506c7c HTTP/1.1
其中 Signature 的偽代碼計算方式如下:
//生成請求的 query 字典
querys = {"PublicKey" : publicKey} + {其他 query 字段}
//對 query 字典按照字典排序方式(lexicographical order)排序
querys = querys.sort()
//生成 signstring
signstring = ""
for key, value in querys {
signstring += key + value
}
//將私鑰加入簽名
signstring += privateKey
//按照SHA1(RFC 3174)計算簽名
signature = sha1(signstring)
//以16進制顯示簽名
signature = HEX(signature)
其他空間管理 API 的簽名均可使用同樣的計算方式生成。
文件管理的簽名有兩種不同的方式通過 HTTP 請求傳遞給服務器,分別是身份驗證標頭和查詢字符串請求身份驗證替代項。
身份驗證標頭該方式使用 Authorization 頭部字段傳遞簽名數據,并放置于各 HTTP 請求的報文頭中,如下圖所示,身份驗證標頭具有以下形式:
Authorization: UCloud UCloudPublicKey:Signature
其中,Signature 是一個哈希值,具體為請求中特定元素的 HMAC-SHA1(RFC2104),因此 Signature 會因請求不同而異。如果客戶端請求中隨附的 Signature 與服務端計算出的 Signature 相匹配,則證明請求者擁有 UCloud 允許的訪問權限。以下是 Authorization 身份驗證標頭構造的偽代碼:
Authorization = "UCloud" + " " + UCloudPublicKey + ":" + Signature
Signature = Base64( HMAC-SHA1( UCloudPrivateKey, UTF-8-Encoding-Of( StringToSign ) ) )
StringToSign = HTTP-Verb + "
" +
Content-MD5 + "
" +
Content-Type + "
" +
Date + "
" +
CanonicalizedUCloudHeaders +
CanonicalizedResource
CanonicalizedUCloudHeaders = <described below>
CanonicalizedResource = "/" + Bucket + "/" + Key
StringToSign 中包括兩類標頭元素:
一類是位置標頭,僅有 3 個,分別是 Content-MD5、Content-Type 和 Date,在 StringToSign 中不包括這些標頭的名稱,僅包括它們在請求中的值,如果請求中這些標頭不存在,需要用空字符串("")
代替;另一類是 UCloud 附加標頭,以X-UCloud-
開頭,此類標頭需要按照下面指定的方法構造 CanonicalizedUCloudHeaders 字符串后加入到 StringToSign 中。
備注:
如果位置標頭不在請求中(例如,Content-Type 或 Content-MD5 對于 PUT 請求是可選的,并且對于GET請求沒有任何意義),必須使用空字符串""替換該位置;BASE64 使用 standardbase64,不是 URLSafe 的 base64 算法,下同;當使用 POST 表單上傳時,簽名使用的 Content-Type 字段應該是 form 參數中的 Content-Type 字段(即文件本身的 mimetype),而非 HTTP 請求的 Content-Type。UCloudPublicKey 和 UCloudPrivateKey 對應 令牌管理 中創建的令牌,用戶也可以用 UCloud 私有訪問密鑰進行訪問。Key使用原始字符串即可,無需經過url編碼計算CanonicalizedUCloudHeaders步驟
將每個以X-UCloud-
開頭的 HTTP 標頭名稱轉換為小寫。例如X-UCloud-Date”改為“x-ucloud-date
。
根據標頭名稱按字典順序排列標頭集。
按照 RFC2616 中第 4.2 節中的規定,將相同名稱的標頭字段合并為一個header-name:comma-separated-value-list
對,各值之間不留空格。
例如,可以將元數據標頭x-ucloud-meta-username:fred
和x-ucloud-meta-username:barney
合并為單個標頭x-ucloud-meta-username:fred,barney
。
通過將折疊空格(包括換行符)替換為單個空格,“展開”跨多個行的長標頭(按照 RFC2616 中第 4.2 節允許的方式)。
刪除標頭中冒號周圍的空格。例如,標頭x-ucloud-meta-username:fred,barney
改為x-ucloud-meta-username:fred,barney
。
最后,請向生成的列表中的每個標準化標頭附加換行字符(U+000A)。通過將此列表中所有的標頭規范化為單個字符串,構建 CanonicalizedUcloudHeaders 元素。
示例
確定使用 API 接口,例如使用 PUTFile 接口,簽名前的請求如下
PUT /demokey HTTP/1.1 Host: demobucket.ufile.ucloud.cn Content-Length: 11434 Content-Type: image/jpeg X-UCloud-Foo: foo X-UCloud-Bar: bar1 X-UCloud-Bar: bar2
拼接簽名字符串對照 step1 的請求中的各個參數,程序中的各變量取值如下(采用偽代碼描述)
bucket = "demobucket"
key = "demokey"
http_verb = "PUT"
content_md5 = ""
content_type = "image/jpeg"
date = ""
canonicalized_ucloud_headers = "x-ucloud-foo:foo" + "
" + "x-ucloud-bar:bar1,bar2" +
"
canonicalized_resource = "/" + "demobucket" + "/" + "demokey"
string2sign = "PUT" + "
"
+ "" + "
"
+ "image/jpg" + "
"
+ "" + "
"
+ "x-ucloud-foo:foo" + "
" + "x-ucloud-bar:bar1,bar2" + "
"
+ "/demobucket/demokey"
即
string2sign = "PUT
image/jpeg
x-ucloud-foo:foo
x-ucloud-bar:bar1,bar2
/demobucket/demokey"
hmac-sha1 運算使用 UCloud 分配給您的私鑰對簽名字符串做 hmac-sha1 運算
hmacstring = hmac-sha1(privateKey, string2sign)
base64 運算對生成的 hmacstring 做 base64 運算
base64string = base64(hmacstring) = S5FVD2w613MKb/hisjaqHdjvn9U=
生成最終簽名格式
signature = UCloud demouser@ucloud.cn13424346821929713944:S5FVD2w613MKb/hisjaqHdjvn9U=
生成帶簽名的 HTTP 請求
PUT /demokey HTTP/1.1 Host: demobucket.ufile.ucloud.cn Content-Length: 11434 Content-Type: image/jpeg X-UCloud-Foo: foo X-UCloud-Bar: bar1 X-UCloud-Bar: bar2 Authorization: UCloud demouser@ucloud.cn13424346821929713944:S5FVD2w613MKb/hisjaqHdjvn9U=
查詢字符串請求身份驗證替代項可以通過傳遞請求信息作為查詢字符串參數,而不是使用 AuthorizationHTTP 標頭來驗證特定類型的請求。這在允許第三方瀏覽器直接訪問您的 US3 私有空間的文件,而無需代理請求時非常有用。其概念是構建一個“預簽名”的請求并將其編碼為最終用戶瀏覽器可檢索的 URL。此外,您還可以通過指定過期時間來限制預簽名請求。
以下是查詢字符串經身份驗證的 US3 REST 請求示例。
GET /demokey.jpg?UCloudPublicKey=AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D HTTP/1.1
Host: demobucket.s3.ucloud.cn
Date: Mon, 26 Mar 2007 19:37:58 +0000
查詢字符串請求身份驗證方法與普通的方法稍有差異,不同之處僅在于 Signature 請求參數和 StringToSign 元素的格式。下面的偽語法演示了查詢字符串請求身份驗證方法。
Signature = URL-Encode( Base64( HMAC-SHA1( UCloudPrivateKey, UTF-8-Encoding-Of( StringToSign ) ) ) );
StringToSign = HTTP-VERB + "
" +
"
" +
"
" +
Expires + "
" +
CanonicalizedUCloudHeaders +
CanonicalizedResource;
請注意,在 StringToSign 中,HTTPDate 位置元素已替換為 Expires。CanonicalizedUCloudHeaders 和 CanonicalizedResource 是相同的。
文件 ETag 可用于查詢文件是否可以進行秒傳。
具體算法的偽代碼如下:
if filesize<=4MB:
hash = base64_url_safe(blkcnt, sha(file))
else:
hash = base64_url_safe(blkcnt, sha(sha(blk0), sha(blk1)...))
字段含義
blkcnt:文件以4MB為一個塊進行切分后的塊個數, 占4個字節,以小端模式保存。
blkN:第N(N>=0)個數據塊的數據。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/126651.html
摘要:概覽概覽產品簡介產品概述功能概覽產品優勢使用限制存儲類型地域和域名計量計費產品價格計費規則欠費處理計費案例快速上手開通服務開始使用控制臺指南存儲空間日志管理文件管理生命周期靜態網站托管域名管理鏡像回源跨區域復制跨域設置數據分析防盜鏈統計報 概覽產品簡介產品概述功能概覽產品優勢使用限制存儲類型地域和域名計量計費產品價格計費規則欠費處理計費案例快速上手開通 US3 服務開始使用 US3控制臺指南...
摘要:示例移動到可執行目錄下配置信息內同,配置路徑自定義。卷的序列號是的目錄個文件字節個目錄可用字節進行掛載操作這里掛載到盤,并且指定為的用戶,日志級別為,預讀窗口為,掛載的桶名為注意目前下掛載只能前臺掛載 下載與環境準備本篇目錄運行環境下載鏈接配置賬號訪問信息運行環境US3FS基于Linux下fuse和Windows平臺下winfsp實現,您的機器需要支持fuse或winfsp。建議您將US3F...
想自建網盤但是又苦于數據太大,購買大存儲容量的VPS主機價格太貴?不妨試試ZPan自建網盤存儲。ZPan致力于打造一款不限速的網盤系統,因此采用客戶端直連云存儲的方式進行設計,即它不支持本地存儲,你的所有數據都是存在第三方存儲商那里。目前ZPan支持所有兼容S3協議的云存儲平臺,包括阿里云OSS 、騰訊云COS 、七牛云Kodo 、Ucloud US3(暫不支持自動設置CORS) 、華為云OBS ...
摘要:歸檔存儲空間英文名稱,是歸檔文件的組織單位,相當于目錄的作用,也是計費權限控制等功能的管理單位。歸檔文件英文名稱,是數據操作的基本單元,支持任意數據類型。主要概念注:UArchive 產品已作為歸檔存儲類型合并至 US3 對象存儲,目前不再向新用戶提供獨立的歸檔存儲服務。如需使用更低成本的對象存儲服務,請至 US3 對象存儲控制臺 。更多 US3 歸檔存儲類型的使用說明請參考 數據歸檔方案。...
摘要:文件管理控制臺文件管理大于工具分片上傳工具使用之前請配置內外網不同地區域名不同,詳情參考文檔上傳工具可以配置相關客戶端密鑰填寫公私鑰注固定域名不加后綴目前僅中國北京二,中國香港,越南胡志明,韓國首爾,巴西圣US3文件管理1、控制臺文件管理(大于500M 工具分片上傳) 2、filemgr工具https://docs.ucloud.cn/ufile/tools/tools/tools_file...
摘要:三是可以降低我們的寫放大,在寫入時不會由于需要更新元數據而寫入兩次,這在隨機能力不是強項的硬盤場景下也格外重要。前言UCloud在2020年8月正式發布了基于US3的全新一代歸檔存儲產品,該產品采用UCloud全新自研存儲架構,相較標準存儲降低近80%存儲成本的同時,與市場同類歸檔存儲產品相比降低近30%的價格。據IDC的預測,全球年新增數據量到2025年將達175ZB,真正能存儲下來的數據...
閱讀 291·2024-11-07 18:25
閱讀 130379·2024-02-01 10:43
閱讀 869·2024-01-31 14:58
閱讀 828·2024-01-31 14:54
閱讀 82773·2024-01-29 17:11
閱讀 3061·2024-01-25 14:55
閱讀 1986·2023-06-02 13:36
閱讀 3035·2023-05-23 10:26