2013-04-23 108 views
1

我想簽署一個亞馬遜sts令牌請求來獲得對我的S3帳戶的臨時訪問權限。我一直在關注簽名版本4的說明,但沒有運氣。亞馬遜從安全令牌服務的AWS請求令牌

我不斷從亞馬遜街道回來這條消息。

<Code>IncompleteSignature</Code>

<Message>Request must contain a signature that conforms to AWS standards</Message>

這裏是我的網址發送請求。

https://sts.amazonaws.com/?AWSAccessKeyId=**********&Action=GetFederationToken&DurationSeconds=3600&SignatureMethod=HmacSHA256&SignatureVersion=4&Timestamp=2013-04-23T19:01:00Z&Version=2011-06-15&Signature=2fc3dc902a20a5aa25c3191f2aa6513088e11596082b6a563b00dc5ea4b8bfa0 

按照簽名版本4的步驟,這是我如何計算簽名。

http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html

任務1:

GET\n 
/\n 
AWSAccessKeyId=<Access Key Removed>& 
Action=GetFederationToken& 
DurationSeconds=3600& 
SignatureMethod=HmacSHA256& 
SignatureVersion=4& 
Timestamp=2013-04-23T19:01:00Z& 
Version=2011-06-15\n 
host:sts.amazonaws.com\n 
host\n 
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 

任務2:

AWS4-HMAC-SHA256\n 
20130423T190100Z\n 
20130423/us-gov-west-1/sts/aws4_request\n 
5e769aeb49a050fd7cd1035122712098fd83220ea42a0d9871f0ff2fa622b1c6 

任務3:

Signature: 2fc3dc902a20a5aa25c3191f2aa6513088e11596082b6a563b00dc5ea4b8bfa0 

任何幫助將不勝感激我已經工作在th到目前爲止沒有運氣。感謝提前:)

回答

2

只是讓這裏的說明,我終於可以通過改變我的請求得到令牌。這樣可以幫助其他遇到同樣問題的人。我無法在文檔中找到很多幫助,但通過不斷修改我的請求,我終於能夠從服務器獲取有用的錯誤消息。最重要的信息是最後一個信息,它準確地提供請求籤名和要簽名的字符串。

這特別適用於從Amazon Secure Token Service檢索聯合令牌。

The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. 

The Canonical String for this request should have been 
'GET 
/
Action=GetFederationToken&Version=2011-06-15&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAXXXXXXXXXWIQ%2F20130424%2Fus-east-1%2Fsts%2Faws4_request&X-Amz-Date=20130424T183200Z&X-Amz-SignedHeaders=host%3Bx-amz-date 
host:sts.amazonaws.com 
x-amz-date: 

host;x-amz-date 
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' 

The String-to-Sign should have been 
'AWS4-HMAC-SHA256 
20130424T183200Z 
20130424/us-east-1/sts/aws4_request 
3eb22aba7f25dd4e01be888added6f74db579bdf0d066d2b1f75779a25b1300d' 

這裏是使用的URL。

https://sts.amazonaws.com/?Action=GetFederationToken&Name=Megan&Version=2011-06-15&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIXXXXXXXXXXWIQ%2F20130424%2Fus-east-1%2Fsts%2Faws4_request&X-Amz-Date=20130424T183200Z&X-Amz-SignedHeaders=host%3Bx-amz-date&X-Amz-Signature=db754013466768c11a86a610796faad6a041bcad9d83f4c958cac82988d2f7d7

+0

你能分享一段代碼嗎? – Tisha 2017-01-30 11:59:36

1

亞馬遜S3目前不支持簽名版本4.請參考目前支持的簽名算法的S3文檔:

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

編輯:對不起,您的誤讀初始請求。你有許多關於STS請求不正確的假設所造成的簽名計算的問題:

  1. 操作是POST
  2. 唯一支持STS區域是美國東部-1。
  3. 日期必須包含在標題簽

雖然我理解你可能不希望使用的SDK,他們將會就如何生成簽名說明性的例子。

下面是我從iOS SDK中提取的示例。

規範要求:

POST\n 
/\n 
\n 
host:sts.amazonaws.com\n 
x-amz-date:20130424T164023Z\n 
\n 
host;x-amz-date\n 
HASH_REMOVED\n 

串籤:

AWS4-HMAC-SHA256\n 
20130424T164023Z\n 
20130424/us-east-1/sts/aws4_request\n 
HASH_REMOVED 
+0

我使用簽名版本4,因爲我簽約到Amazon安全令牌服務(STS)的請求,以獲得訪問令牌到我的S3帳戶。 – Megan 2013-04-24 14:53:53

+0

您可能需要考慮查看我們的任何可用SDK,因爲它們都具有簽名版本4的實現。 – 2013-04-24 16:18:17

+0

需要注意的一件事:STS僅在us-east-1中可用,因此您需要的區域即使您將在我們的go-west-1中使用它,也可以使用您的簽名來申請STS。 – 2013-04-24 16:28:36