

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 驗證 Amazon SQS 的請求
<a name="sqs-api-request-authentication"></a>

身分驗證是辨識與確認傳送請求的當事方身分的過程。在身分驗證的第一階段， 會 AWS 驗證生產者的身分，以及生產者是否已[註冊使用 AWS](https://aws.amazon.com/) （如需詳細資訊，請參閱 [設定 Amazon SQS](sqs-setting-up.md))。接著，依照下列程序 AWS 刪除 ：

1. 生產者 (發送者) 必須取得必要的登入資料。

1. 生產者將請求和登入資料發送給消費者 (接收者)。

1. 消費者使用登入資料來確認是否為生產者發送請求。

1. 以下其中一種情況將發生：
   + 若身分驗證成功，消費者便會繼續進行流程。
   + 若身分驗證失敗，消費者便會拒絕請求並傳回錯誤。

## 使用 HMAC-SHA 的基本身分驗證流程
<a name="sqs-api-basic-authentication-process"></a>

使用查詢 API 存取 Amazon SQS 時，必須提供下列項目以對您的請求進行身分驗證：
+ 識別您 的**AWS 存取金鑰 ID** AWS 帳戶，其 AWS 會使用 來查詢您的私密存取金鑰。
+ **HMAC-SHA 請求簽章**，使用您的私密存取金鑰 （只有您知道的共用秘密 AWS，如需詳細資訊，請參閱 [RFC2104](http://www.faqs.org/rfcs/rfc2104.html))。[AWS 開發套件](https://aws.amazon.com/code/)會處理簽署程序，但若您透過 HTTP 或 HTTPS 提交查詢請求，則每一次查詢請求都必須附上簽章。

  1. 衍生 Signature 第 4 版簽署金鑰。如需詳細資訊，請參閱[使用 Java 衍生簽署金鑰](https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-java)。
**注意**  
Amazon SQS 支援 Signature 第 4 版，此版本比起之前版本提供更佳的 SHA256 型安全性與效能。若您建立的新應用程式會用到 Amazon SQS，請使用 Signature 第 4 版。

  1. 對請求簽章進行 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` 物件，有[完整的日期，包含小時、分鐘、秒鐘](http://www.w3.org/TR/xmlschema-2/#dateTime)。例如：`2007-01-31T23:59:59Z`。儘管並非必要，但建議您使用國際標準時間 (格林威治標準時間) 時區提供此物件。
**注意**  
請確定您的伺服器時間設定正確。如果您指定時間戳記 （而不是過期），請求會在指定的時間後 15 分鐘自動過期 (AWS 不會處理時間戳記早於伺服器上目前時間 AWS 15 分鐘以上的請求）。  
如果您是使用 .NET，切勿傳送過於精確的時間戳記 (因為該平台對於如何去除多餘的時間準度有不同的解釋)。在此情況下，應手動建構精準度不超過一毫秒的 `dateTime` 物件。

## 第 1 部分：來自使用者的請求
<a name="sqs-authentication-user"></a>

以下是使用 HMAC-SHA AWS 請求簽章來驗證請求時必須遵循的程序。

![描述使用者請求的圖表。](https://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-basic-authentication-process-hmac-user.png)


1. 建構 請求 AWS。

1. 使用您的私密存取金鑰，計算金鑰式雜湊訊息身分驗證碼 (HMAC-SHA) 簽章。

1. 在請求中包含簽章和存取金鑰 ID，然後將請求傳送到 AWS。

## 第 2 部分：來自 的回應 AWS
<a name="sqs-authentication-aws"></a>

AWS 會在回應中啟動下列程序。

![描述 回應的圖表 AWS。](https://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-basic-authentication-process-hmac-aws.png)


1. AWS 使用存取金鑰 ID 來查詢您的私密存取金鑰。

1. AWS 使用與計算您在請求中傳送的簽章相同的演算法，從請求資料和私密存取金鑰產生簽章。

1. 以下其中一種情況將發生：
   + 如果 AWS 產生的簽章符合您在請求中傳送的簽章， 會將請求 AWS 視為真實。
   + 如果比較失敗，則會捨棄請求，並 AWS 傳回錯誤。