我目前正在實施應用程序以生成Amazon AWS簽名版本4簽名(有關簽名過程的詳細信息,請參閱此頁:http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html)。 方便的是,亞馬遜還爲這些簽名提供測試套件。然而,有一個測試用例我無法弄清楚。 請注意,我的問題僅涉及簽名過程的第一步(生成規範請求),特別是創建規範查詢字符串。根據Amazon AWS規範的URL編碼的查詢字符串
測試用例輸入HTTP請求看起來像這樣:
POST /[email protected]#$%^&+=/,?><`";:\|][{} [email protected]#$%^&+=/,?><`";:\|][{} http/1.1
Date:Mon, 09 Sep 2011 23:36:00 GMT
Host:host.foo.com
而這是用於規範請求預期的結果:
POST
/
%20=%2F%2C%3F%3E%3C%60%22%3B%3A%5C%7C%5D%5B%7B%7D&%40%23%24%25%5E=
date:Mon, 09 Sep 2011 23:36:00 GMT
host:host.foo.com
date;host
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
在規範請求的第三行表示URL-編碼查詢字符串。但我真的不明白他們是如何從輸入到那裏,連繼西格V4文檔中所述的規則:
爲構建規範的查詢字符串,請完成以下步驟:
URI編碼每根據以下規則參數名稱和值:
不要URL編碼任何未預留字符RFC 3986定義的:
包括AZ,az,0-9,連字符( - ),下劃線(_) ,句號(。)和代字號(〜)。 使用%XY對所有其他字符進行百分比編碼,其中X和Y是十六進制字符(0-9和大寫字母A-F)。
例如,空格字符必須編碼爲%20(不像某些編碼方案使用'+'),擴展的UTF-8字符必須採用%XY%ZA%BC的格式。
按字符代碼對編碼參數名稱進行排序(即按照嚴格的ASCII順序)。例如,以大寫字母F(ASCII代碼70)開頭的參數名稱位於以小寫字母b(ASCII代碼98)開頭的參數名稱前面。
通過從排序列表中的第一個參數名稱開始構建規範查詢字符串。
對於每個參數,追加URI編碼的參數名稱,後跟字符'='(ASCII碼61),後跟URI編碼的參數值。 對於沒有值的參數使用空字符串。
在除了列表中最後一個值之外的每個參數值後附加字符'&'(ASCII代碼38)。
有人可以解釋一下嗎? 預先感謝一堆!
就是這樣!真的,非常感謝。現在所有的數字。只是一個小小的更正:由於查詢字符串中間的空間,第三個和第四個鍵被丟棄。也許你可以編輯上面的內容?儘管如此,我會將此標記爲正確答案:) – Zasha