0

这是一个奇怪的问题。

我正在使用 Amazon S3 在我的 Silverlight 4 应用程序中存储文件。由于与 REST API 和 S3 相关的文件限制(对于 REST,文件必须小于 1mb),我试图让 SOAP 调用正常工作。

我按照蒂姆在这里写的教程http://timheuer.com/blog/archive/2008/07/05/access-amazon-s3-services-with-silverlight-2.aspx

减去关于 CNAME 的部分,因为他更新并说这样做对安全性很不利,但一直有连接问题,直到今天早上它才神奇地开始工作,我能够得到我所有存储桶的列表!所以我以为它已经修复了,直到几分钟前我重新启动 Chrome 然后再次尝试应用程序时,它不再连接到 SOAP 端点并且 VS 给了我跨域错误。

但是,我想到了我之前为使其正常工作所做的所有事情,我唯一能想到的就是我打开了一个选项卡,其中通过 bucket.s3.amazonaws.com/clientaccesspolicy 打开了 clientaccesspolicy.xml 文件。 xml。所以我尝试在新选项卡中再次打开它,在另一个选项卡中打开我的应用程序,然后 SOAP 调用开始工作!仅当文件在选项卡中打开时才有效!!!我也在 Firefox 和 IE 中尝试过,同样的事情!

我有 Fiddler,它似乎并没有真正调用过 clientaccesspolicy.xml,除非它隐藏在其中一个 SSL 调用中,然后无法分辨,但没有直接调用 .s3.amazonaws .com/clientaccesspolicy.xml 像这里所说的其他一些问题一样通过 Fiddler。

非常感谢这里的一些帮助,谢谢。

编辑:因为有人可能会要求它,这是我目前正在使用的 clientaccesspolicy.xml 文件。我知道这不是最安全的,只是想在我取出通配符之前让它工作

<access-policy>
    <cross-domain-access>
       <policy>
         <allow-from http-methods="*" http-request-headers="*">
            <domain uri="http://*"/>
            <domain uri="https://*"/>
         </allow-from>
         <grant-to>
            <resource path="/" include-subpaths="true"/>
         </grant-to>
        </policy>
    </cross-domain-access>
 </access-policy>

编辑 2:这似乎是 HTTPS 的问题。如果我强制我的端点是 http,而不是 Amazon 要求的 https,Fiddle 会显示 SL 访问 clientaccesspolicy.xml 文件。

4

2 回答 2

0

当您在另一个选项卡中打开 clientaccesspolicy.xml 文件时,我猜您正在传递一些允许您访问它的凭据。这将设置一个 cookie,Silverlight 也可以使用该 cookie 来访问 clientaccesspolicy.xml 文件。当您关闭浏览器时,您会丢失 cookie,从而丢失对文件的访问权限。

于 2011-09-23T19:23:31.320 回答
0

所以我想通了。

第一个问题,关于为什么我打开它会起作用,不是因为设置了 cookie(据说),而是通过 https 以这种方式访问​​它使我接受了亚马逊的 SSL 安全策略。

第二个问题,我不应该接受。亚马逊使用的 SSL 通配符 *.s3.amazonaws.com 与其中包含句点的存储桶不匹配。因此,当我按照蒂姆的教程进行操作时,我将所有的水桶都做成了这样

bucketname.domain.com

当我尝试通过 SOAP(以及随后的 https)以这种方式访问​​它时,它不起作用,因为通配符不匹配。更改了我所有的存储桶以不包含存储桶,并且它起作用了。

还应该注意,Tim 的教程不再适用,因为他使用的是 http,并且在今年 6 月,Amazon 强制通过 https 进行 SOAP 调用,因此 http 调用不再起作用。

于 2011-09-26T18:06:50.580 回答