本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
驗證請求:使用授權標頭AWS (簽章第 4 版)
主題
概觀
使用 HTTP Authorization標頭是提供身分驗證資訊的最常見方法。除了使用查詢參數簽署的 POST 請求和請求之外,所有 Amazon S3 操作都會使用Authorization請求標頭來提供身分驗證資訊。
以下是 Authorization 標頭值的範例。為了便於閱讀,向此範例新增了分行符號:
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
下表說明上述範例中Authorization標頭值的各種元件:
| 元件 | 說明 |
|---|---|
AWS4-HMAC-SHA256 |
用於計算簽章的演算法。當您使用 AWS Signature 第 4 版進行身分驗證時,必須提供此值。 字串指定 AWS Signature 第 4 版 ( |
Credential |
您的存取金鑰 ID 和範圍資訊,包括用於計算簽章的日期、區域和服務。 此字串的格式如下:
其中:
|
SignedHeaders |
用於計算
|
Signature |
256 位元簽章以 64 個小寫十六進位字元表示。例如:請注意,簽章計算因您選擇傳輸承載的選項而異。 |
簽章計算會根據您選擇傳輸請求承載的方法而有所不同。S3 支援下列選項:
-
在單一區塊中傳輸承載 – 在此情況下,您有下列簽章計算選項:
-
已簽章的承載選項 – 您可以選擇性地計算整個承載檢查總和,並將其包含在簽章計算中。這可提高安全性,但您需要讀取承載兩次或將其緩衝在記憶體中。
例如,若要上傳檔案,您需要先讀取檔案,以計算用於簽章計算的承載雜湊,並在建立請求時再次進行傳輸。對於較小的承載,此方法可能較適合。不過,對於大型檔案,讀取檔案兩次可能會效率不佳,因此您可能想要改為以區塊形式上傳資料。
我們建議您包含承載檢查總和,以提高安全性。
-
未簽章的承載選項 – 請勿在簽章計算中包含承載檢查總和。
如需計算簽章和建構授權標頭值的step-by-step說明,請參閱 授權標頭的簽章計算:在單一區塊中傳輸承載AWS (簽章第 4 版)。
-
-
在多個區塊中傳輸承載 (區塊上傳) – 在此情況下,您會在區塊中傳輸承載。無論承載大小為何,您都可以以區塊傳輸承載。
您可以將承載分解為區塊。這些可以是固定或可變大小的區塊。透過在區塊中上傳資料,您可以避免讀取整個承載來計算簽章。相反地,對於第一個區塊,您可以計算僅使用請求標頭的種子簽章。第二個區塊包含第一個區塊的簽章,而每個後續區塊包含其前面區塊的簽章。在上傳結束時,您會傳送包含 0 個位元組資料的最終區塊,其中包含承載最後一個區塊的簽章。如需詳細資訊,請參閱授權標頭的簽章計算:以多個區塊傳輸承載 (區塊上傳)AWS (簽章版本 4)。
簽署請求時,您可以使用 AWS Signature 第 4 版或 AWS Signature 第 4A 版。兩者之間的主要差異取決於簽章的計算方式。使用 AWS 第 4A 版簽署程序,簽章不包含區域特定的資訊,而是使用 AWS4-ECDSA-P256-SHA256 演算法計算。
除了這些選項之外,您還可以選擇在請求中包含預告片。若要在請求中包含尾隨,您需要透過將 x-amz-content-sha256設定為適當的值,在 標頭中指定 。如果您使用的是結尾標頭,則必須在標頭x-amz-trailer中包含 ,並在逗號分隔清單中將結尾標頭名稱指定為字串。所有結尾標頭都會在最後一個區塊之後寫入。如果您要在多個區塊中上傳資料,您必須先傳送含有 0 個位元組資料的最終區塊,再傳送結尾標頭。
當您傳送請求時,您必須透過使用下列其中一個值新增 x-amz-content-sha256標頭,來告知 Amazon S3 您在簽章計算中選擇的上述選項:
| 標頭值 | 說明 |
|---|---|
|
實際承載檢查總和值 |
此值是物件的實際檢查總和,只有在您以單一區塊上傳資料時,才能這麼做。 |
|
UNSIGNED-PAYLOAD |
當您將物件上傳為單一未簽署區塊時,請使用此選項。 |
|
STREAMING-UNSIGNED-PAYLOAD-TRAILER |
透過多個區塊傳送未簽章的承載時,請使用此選項。在這種情況下,在上傳區塊之後,您也會有一個結尾標頭。 |
|
STREAMING-AWS4-HMAC-SHA256-PAYLOAD |
在透過多個區塊傳送承載時使用此值,並使用 簽署區塊 |
|
STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER |
在透過多個區塊傳送承載時使用此值,並使用 簽署區塊 |
|
STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD |
在透過多個區塊傳送承載時使用此值,並使用 簽署區塊 |
|
STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD-TRAILER |
在透過多個區塊傳送承載時使用此值,並使用 簽署區塊 |
收到請求時,Amazon S3 會使用 Authorization標頭和 date標頭中的資訊,重新建立要簽署的字串。然後,它會使用與簽章相符的身分驗證服務進行驗證。您可以使用 HTTP Date或 x-amz-date標頭來指定請求日期。如果兩個標頭都存在,x-amz-date則 優先。
如果簽章相符,Amazon S3 會處理您的請求;否則,您的請求將會失敗。
如需詳細資訊,請參閱下列主題:
授權標頭的簽章計算:在單一區塊中傳輸承載AWS (簽章第 4 版)
授權標頭的簽章計算:以多個區塊傳輸承載 (區塊上傳)AWS (簽章版本 4)