我最近使用RESTAPI实现了AWS签名版本4。这一点通过广泛的回归测试得到了验证。
我遇到的问题是,回归测试在针对驻留在eu-Central-1
区域中的桶运行时成功,但始终失败,驻留在us-East-1
或us-West-2
。
以下是成功和失败尝试的片段。
欧盟中央1号:成功
HTTP请求:
GET./ host:s3.eu-central-1.amazonaws.com.x-amz-content-sha256:e3b0...b855.x-amz-date:Wed, 25 May 2016 03:13:21 +0000 host;x-amz-content-sha256;x-amz-date.e3b0...b855
签名字符串:
AWS4-HMAC-SHA256 Credential=AKIAJZN7UY6XHIZPWIKQ/20160525/eu-central-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=cf5f...4dc8
服务器响应:
<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult
xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>100a...a575</ID>
</Owner>
<Buckets>
<Bucket>
. . .
</Bucket>
</Buckets>
</ListAllMyBucketsResult>
美国东部1号:失败
HTTP请求:
GET./ host:s3.us-east-1.amazonaws.com.x-amz-content-sha256:e3b0...b855.x-amz-date:Wed, 25 May 2016 03:02:27 +0000 host;x-amz-content-sha256;x-amz-date.e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
签名字符串:
AWS4-HMAC-SHA256
Credential=AKIAJZN7UY6XHIZPWIKQ/20160525/us-east-1/s3/aws4_request,
SignedHeaders=host;x-amz-content-sha256;x-amz-date,
Signature=01e97...4d00
服务器响应:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>92EEF2A86ECA88EF</RequestId>
<HostId>i3wTU6OzBrlX89xR4KnnezBx1Tb2IGN2wtgPJMRtKLjHxF/B6VdCQqPz1279J7e5</HostId>
</Error>
US-West-2:失败
HTTP请求:
GET./ host:s3.us-west-2.amazonaws.com.x-amz-content-sha256:e3b0...b855.x-amz-date:Wed, 25 May 2016 07:04:47 +0000 host;x-amz-content-sha256;x-amz-date.e3b0...b855
签名字符串:
AWS4-HMAC-SHA256
Credential=AKIAJZN7UY6XHIZPWIKQ/20160525/us-west-2/s3/aws4_request,
SignedHeaders=host;x-amz-content-sha256;x-amz-date,
Signature=cf70...36b9
服务器响应:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>DB143DBF0F316EB8</RequestId>
<HostId>5hWJ0AHM466QcT+BK4UaEFpqXFNaJFEuAPlN/ZZPBhL+NDYBoGaySRkXQ3BRdyfy9PBDuSb0oHA=</HostId>
</Error>
迄今为止所作的努力包括:
>
我在Google和StackOverflow上搜索“拒绝访问”的可能原因,这导致我添加了一个bucket策略,向所有人授予权限,但毫无用处。
AWS控制台中欧盟和美国帐户的权限看起来是一样的,所以还没有提示。
我在bucket中添加了日志记录,希望看到一个失败条目,但是在身份验证完成之前不会记录任何内容。
有人知道为什么AWS v4身份验证在eu-central-1存储桶中始终成功,但在us-east-1和us-east-2存储桶中同样失败吗?
这是你的问题。
出于未知的原因,在S3中,欧盟中央-1是一个怪人。REST终结点在主机名中使用两种变体:bucket.s3.eu-central-1.amazonaws.com
或bucket.s3-eu-central-1.amazonaws.com
。
区别在于s3
后面的点或破折号。
除us-east-1和ap-northeast-2(与eu-central-1类似)以外的所有其他地区(截至目前)仅在s3
之后使用破折号,例如bucket.s3-us-west-2.amazonaws.com
。。。没有点。
us-East-1期望bucket.s3.amazonaws.com
或bucket.s3-external-1.amazonaws.com
。
最后,在最初创建bucket后的几分钟内,任何地区都将使用bucket.s3.amazonaws.com,因为DNS与bucket位置数据库集成,并自动将每个bucket的请求路由到正确的位置。
但是请注意,当您对请求进行签名时,您总是在签名算法本身中使用实际的区域名称,而不是endpoint,就像您似乎已经在做的那样。
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
我会推测这个惯例实际上是新地区的“新常态”——它与其他AWS服务更加一致。S3是最古老的版本之一,因此遗留设计决策更可能存在是有道理的,这里的情况似乎就是这样。
问题内容: 我目前有一个Palm WebOS应用程序,该应用程序使用Ajax.Request通过基本身份验证连接到Web服务。要发送用户名和密码,我只需将其包含在url(即http:// username:password @ ip-address:port / )中即可,效果非常好,期望密码包含字母数字字符以外的任何字符(例如, ,最近有一个用户给我发送电子邮件,该用户的密码中包含“ @”和“&
Tweepy API请求twitter return me Twitter错误响应:状态代码=401。 这是我的实际代码: 我曾试图用tweepy软件包删除推文,并获得了所有必需的密钥。镊子包装不起作用吗?有人能帮我解决这个问题吗。
成员身份验证 PDF版下载 OAuth2简介 如流平台提供了OAuth的授权登录方式,可以使如流客户端(移动端或者桌面端内嵌打开)打开的网页获取成员的身份信息,从而免去登录环节。 企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的身份信息(UserId)。 第一步:构造网页授权链接 获取用户在如流客户端打开应用(或者链接)时的用户身份,如流提供两
我已经使用以下命令启动了,并创建了一个用户来执行此操作(正在工作,因为如果我手动执行工作),直到我添加了这个,它才开始工作,所以也许这就是我需要的。 我错过了什么?
问题内容: 我有一个非常简单的selenium-webdriver脚本。我想使用webdriver进行HTTP身份验证。 脚本: 问题: 抛出 org.openqa.selenium.NoAlertPresentException:不存在警报 题: Webdriver是否仅找到警报对话框作为警报? 在不使用AutoIt或http:// username:password @somesite的情况下
问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com