本頁提供搭配 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 Identity 服務簽署字串,這項服務會使用 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)。
串連所有自訂標頭。
標準資源
在您使用程式建立已簽署的網址時,可串連用於執行要求的資源路徑 (值區和物件及子資源),藉此建立訊息的標準資源部分。建立資源時請注意下列幾點:
標準資源是接在主機名稱之後的部分。舉例來說,如果 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等查詢字串參數。