非常混乱Silverlight,Amazon S3和clientaccesspolicy.xml问题

时间:2011-09-23 18:54:49

标签: silverlight amazon-s3 clientaccesspolicy.xml

这是一个奇怪的。

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

我按照Tim在http://timheuer.com/blog/archive/2008/07/05/access-amazon-s3-services-with-silverlight-2.aspx

撰写的教程

减去关于CNAME的部分,因为他更新并说为安全做这件事很糟糕, 但一直有问题连接,直到它今天早上神奇地开始工作,我能够得到我所有桶的清单!所以我认为这是固定的,直到几分钟前我重新启动Chrome然后再次尝试应用程序,它再也没有连接到SOAP端点,VS给了我跨域错误。

然而,我想到了我之前为使其工作所做的所有事情,我唯一能想到的是我打开了一个tab,其中clientaccesspolicy.xml文件通过bucket.s3.amazonaws.com打开/clientaccesspolicy.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,而不是亚马逊要求的https,则Fiddle会显示SL访问clientaccesspolicy.xml文件。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

所以我想通了。

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

第二个问题,我不应该接受它。 SSL通配符亚马逊使用* .s3.amazonaws.com,与包含句点的桶不匹配。因此,当我按照Tim的教程时,我就像这样做了所有的桶。

bucketname.domain.com

当我尝试通过SOAP(以及随后的https)访问它时,它无法正常工作,因为通配符未匹配。改变了我的所有桶以不包含任何桶,它工作。

还应该注意到Tim的教程不再有效,因为他正在使用http。今年6月,亚马逊强制通过https进行SOAP呼叫,因此http呼叫不再起作用。