本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
驗證 Amazon SQS 的請求
身分驗證是辨識與確認傳送請求的當事方身分的過程。在驗證的第一階段, AWS 驗證生產者的身份以及生產者是否已註冊使用 AWS
-
生產者 (發送者) 必須取得必要的登入資料。
-
生產者將請求和登入資料發送給消費者 (接收者)。
-
消費者使用登入資料來確認是否為生產者發送請求。
-
以下其中一種情況將發生:
-
若身分驗證成功,消費者便會繼續進行流程。
-
若身分驗證失敗,消費者便會拒絕請求並傳回錯誤。
-
使用 HMAC-SHA 的基本身分驗證流程
使用查詢 API 存取 Amazon SQS 時,必須提供下列項目以對您的請求進行身分驗證:
-
識別您的AWS 存取金鑰 ID AWS 帳戶, AWS 用來查詢您的秘密存取金鑰。
-
HMAC-SHA 請求簽名,使用您的密鑰訪問密鑰(只有您知道的共享密鑰)進行計算,如 AWS需更多信息,請參閱 RFC2104)。
AWS 開發套件 會處理簽署程序,但若您透過 HTTP 或 HTTPS 提交查詢請求,則每一次查詢請求都必須附上簽章。 -
衍生 Signature 第 4 版簽署金鑰。如需詳細資訊,請參閱使用 Java 衍生簽署金鑰。
注意
Amazon SQS 支援 Signature 第 4 版,此版本比起之前版本提供更佳的 SHA256 型安全性與效能。若您建立的新應用程式會用到 Amazon SQS,請使用 Signature 第 4 版。
-
對請求簽章進行 Base64 編碼。以下範例 Java 程式碼執行此作業:
package amazon.webservices.common; // Define common routines for encoding data in AWS requests. public class Encoding { /* Perform base64 encoding of input bytes. * rawData is the array of bytes to be encoded. * return is the base64-encoded string representation of rawData. */ public static String EncodeBase64(byte[] rawData) { return Base64.encodeBytes(rawData); } }
-
-
請求的時間戳記 (或過期時間)。在請求中使用的時間戳記必須是
dateTime
物件,有完整的日期,包含小時、分鐘、秒鐘。例如: 2007-01-31T23:59:59Z
。儘管並非必要,但建議您使用國際標準時間 (格林威治標準時間) 時區提供此物件。注意
請確定您的伺服器時間設定正確。如果您指定時間戳記 (而非過期),請求會在指定時間後 15 分鐘自動過期 (AWS 不會處理時間戳記早於 AWS 伺服器上目前時間 15 分鐘的要求)。
如果您是使用 .NET,切勿傳送過於精確的時間戳記 (因為該平台對於如何去除多餘的時間準度有不同的解釋)。在此情況下,應手動建構精準度不超過一毫秒的
dateTime
物件。
第 1 部分:來自使用者的請求
以下是使用 HMAC-SHA 請求簽名驗證 AWS 請求時必須遵循的過程。
![描述來自用戶的請求的圖表。](images/sqs-basic-authentication-process-hmac-user.png)
-
建構要求 AWS。
-
使用您的私密存取金鑰,計算金鑰式雜湊訊息身分驗證碼 (HMAC-SHA) 簽章。
-
在請求中包含簽名和您的訪問密鑰 ID,然後將請求發送到 AWS。
第 2 部分:來自的回應 AWS
AWS 開始響應以下過程。
![描述來自的響應的圖表 AWS。](images/sqs-basic-authentication-process-hmac-aws.png)
-
AWS 使用存取金鑰 ID 來查詢您的秘密存取金鑰。
-
AWS 使用與計算要求中傳送的簽章相同的演算法,從請求資料和秘密存取金鑰產生簽章。
-
以下其中一種情況將發生:
-
如果 AWS 生成的簽名與您在請求中發送的簽名匹配,則 AWS 認為該請求是真實的。
-
如果比較失敗,則會捨棄要求,並 AWS 傳回錯誤。
-