2013-04-23 246 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