1

我正在尝试签署亚马逊 sts 令牌请求以临时访问我的 S3 帐户。我一直在按照 Signature Version 4 的说明进行操作,但没有成功。

我不断从亚马逊 sts 收到这条消息。

<Code>IncompleteSignature</Code>

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

这是我发送的 url 请求。

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

按照 Signature Version 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

任何帮助将不胜感激,到目前为止,我一直在努力解决这个问题。提前致谢 :)

4

2 回答 2

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

于 2013-04-24T18:52:50.757 回答
1

Amazon S3 当前不支持签名版本 4。有关当前支持的签名算法,请参阅 S3 文档:

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

编辑:很抱歉误读了您的初始请求。您对 STS 请求有许多不正确的假设,这些假设会导致您的签名计算出现问题:

  1. 操作是 POST
  2. STS 唯一受支持的区域是 us-east-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
于 2013-04-24T13:22:37.463 回答