本頁面概略說明使用 V2 簽署程序時的已簽署網址,這是值區和物件的查詢字串驗證機制。使用經簽署的網址,可將限時的讀取或寫入權限提供給任何知道該網址的使用者,且不限於使用者帳戶擁有者。
字串中需要簽署的部分
以程式建立經簽署的網址時,程式會建構要簽署的字串。在程式中,這個字串應定義如下:
StringToSign = HTTP_Verb + "\n" +
Content_MD5 + "\n" +
Content_Type + "\n" +
Expires + "\n" +
Canonicalized_Extension_Headers +
Canonicalized_Resource
下表說明組成此結構的元件:
| 字串組成部分 | 範例 | 說明 |
|---|---|---|
HTTP_Verb |
GET |
(必要) 要與經簽署的網址搭配使用的 HTTP 動詞。 注意:除了上述情況外,經簽署的網址字串不支援 HTTP 動詞 |
Content_MD5 |
rmYdCNHKFXam78uCt7xQLw== |
(選用) 使用 Base64 的 MD5 摘要值。如果您在字串中提供這個部分,則用戶端 (通常為瀏覽器) 提供的這個 HTTP 標頭必須在要求中含有相同值。 |
Content_Type |
text/plain |
(視需要) 如果您提供 content-type,則用戶端 (瀏覽器) 提供的這個 HTTP 標頭必須設為相同值。 |
Expires |
1388534400 |
(必要) 這是簽章到期的時間戳記 (以秒為單位),自 Unix 紀元 (世界標準時間 1970 年 1 月 1 日 0 時 0 分 0 秒) 開始算起。伺服器會拒絕在這個時間戳記之後收到的任何要求,以及在用於產生經簽署的網址的金鑰輪替後收到的任何要求。基於安全考量,以及為了與 V4 簽署程序相容,Expires 的設定值應對應至未來最多 1 週 (604800 秒)。 |
Canonicalized_Extension_Headers |
x-goog-acl:public-read\nx-goog-meta-foo:bar,baz\n |
(視需要) 伺服器會檢查用戶端是否在要求中提供相符的值 (使用經簽署的網址)。要瞭解如何建立標準標頭以進行簽署,請參閱標準擴充標頭。 |
Canonicalized_Resource |
/bucket/objectname |
(必要) 正在網址中處理的資源。進一步詳情請參閱標準資源。 |
使用 App Engine App Identity 服務簽署字串
以程式建立經簽署的網址時,您可以從程式內簽署字串,也可以使用 App Engine 身分識別服務從 App Engine 應用程式內簽署字串,這項服務會使用 App Engine 的服務帳戶憑證。例如,您可以使用 Python App Identity API 來執行以下作業:
使用
google.appengine.api.app_identity.sign_blob()簽署所建構字串的位元組,並在組裝經簽署的網址時提供所需的Signature。使用
google.appengine.api.app_identity.get_service_account_name()擷取服務帳戶名稱,也就是組合經簽署的網址時所需的GoogleAccessId。
如需其他語言的支援,請參閱 Java 適用的 App Identity API 總覽、PHP 適用的 App Identity API 總覽和 App Identity Go 函式一文。
App Identity 服務在簽署 blob 時會輪替私密金鑰。從 App Identity 服務產生的經簽署網址至少可使用一小時,最適合用於短期存取資源。
標準擴充標頭
以程式建立經簽署的網址時,請將所有以 x-goog- 開頭的擴充功能 (自訂) 標頭串連起來,建構訊息的標準擴充功能標頭部分。不過,您無法執行簡單的串連作業。請在建立標頭時遵循以下演算法:
將所有自訂標頭名稱設為小寫。
依碼點值,按標頭名稱的字母順序排序所有自訂標頭。
移除
x-goog-encryption-key和x-goog-encryption-key-sha256標頭 (如有)。這些標頭包含機密資訊,不得納入待簽署字串;不過,在使用產生的經簽署的網址時,仍須在要求中使用這些標頭。使用以半形逗號分隔的值清單來建立一個標頭名稱,藉此消除重複的標頭名稱。請確認值之間沒有空白字元,且逗號分隔的清單順序與要求中的標頭排列順序相同。如需詳細資訊,請參閱 RFC 7230 的 3.2 節。
以單一空格取代所有所有折疊的空白字元或新行字元 (CRLF 或 LF)。如要進一步瞭解摺疊空白字元,請參閱 RFC 7230 第 3.2.4 節。
移除位於標頭名稱後方的冒號前後的任何空白字元。
在每個自訂標頭後方附加換行符號「\n」(U+000A)。
串連所有自訂標頭。
標準資源
使用程式建立經簽署的網址時,您需要串連要求作用的資源路徑 (bucket、物件和子資源),建構訊息的標準化資源部分。建立資源時請注意下列幾點:
標準資源是接在主機名稱之後的部分。舉例來說,如果 Cloud Storage 網址為
https://storage.googleapis.com/example-bucket/cat-pics/tabby.jpeg,則標準資源為/example-bucket/cat-pics/tabby.jpeg。如果要求範圍僅限子資源 (例如
?cors),請在字串的最後加上這個子資源 (包括問號)。請務必完整複製 HTTP 要求路徑,也就是說,您應該在建立的字串中加入所有網址編碼 (百分比符號)。此外,也請確認您僅加入指定子資源 (例如
cors) 的查詢字串參數。您不應加入?prefix、?max-keys、?marker和?delimiter等查詢字串參數。