Очень запутанная проблема Silverlight, Amazon S3 и clientaccesspolicy.xml - PullRequest
0 голосов
/ 23 сентября 2011

Это странный.

Я использую Amazon S3 для хранения файлов в моем приложении Silverlight 4. Из-за ограничений файлов, связанных с REST API и S3 (файлы должны быть <1 МБ для REST), я пытаюсь заставить вызовы SOAP работать. </p>

Я следовал учебнику, написанному Тимом здесь http://timheuer.com/blog/archive/2008/07/05/access-amazon-s3-services-with-silverlight-2.aspx

минус детали о CNAME с тех пор, как он обновился и сказал, что это было плохо для безопасности, но продолжали возникать проблемы с подключением, пока он просто волшебным образом не начал работать этим утром, и я смог получить список всех своих ведер! Поэтому я подумал, что это исправлено, пока несколько минут назад я не перезапустил Chrome, а затем снова попробовал приложение, и оно больше не подключалось к конечной точке SOAP, а VS выдал мне междоменную ошибку.

Однако я подумал обо всем, что я сделал ранее, чтобы заставить его работать, и единственное, о чем я мог подумать, это то, что у меня была открыта вкладка с файлом clientaccesspolicy.xml, открытым через bucket.s3.amazonaws.com /clientaccesspolicy.xml. Поэтому я попытался открыть ее снова в новой вкладке, открыл свое приложение в другой, и затем SOAP-вызовы начали работать! Работает только когда файл открыт во вкладке !!! Я тоже пробовал это в Firefox и IE, тоже самое!

У меня есть Fiddler, и он, кажется, на самом деле никогда не звонит в clientaccesspolicy.xml, если только он не спрятан внутри одного из вызовов SSL, о котором потом невозможно узнать, но нет прямых вызовов. s3.amazonaws.com/clientaccesspolicy.xml проходит через Fiddler, как и некоторые другие вопросы, на которые здесь сказано, что будет.

Очень признателен, ребята, спасибо.

Edit: Так как кто-то, вероятно, попросит об этом, это файл 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, требуемый Amazon, Fiddle покажет SL доступ к файлу clientaccesspolicy.xml.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Итак, я разобрался.

Первая проблема, касающаяся того, почему это сработало бы, если бы я ее открыл, была не из-за того, что был установлен файл cookie (так сказать), а из-за доступа к нему таким образом через https.заставил меня принять политику безопасности SSL для amazon.

Вторая проблема, мне не следовало ее принимать.Подстановочный знак SSL, используемый Amazon, * .s3.amazonaws.com, не соответствует сегментам, в которых есть точки.Поэтому, следуя руководству Тима, я собрал все свои корзины, например,

bucketname.domain.com

, и когда я попытался получить к нему доступ таким образом через SOAP (и впоследствии https),не работает, потому что шаблон не совпадал.Изменились все мои сегменты, чтобы они не содержали сегменты, и это сработало.

Следует также отметить, что учебное пособие Тима больше не работает, поскольку он использует http, и в июне этого года Amazon принудила SOAP-вызовы через https, поэтому http-вызовы больше не будутработа.

0 голосов
/ 23 сентября 2011

Когда вы открываете файл clientaccesspolicy.xml в другой вкладке, я предполагаю, что вы передаете некоторые учетные данные, которые позволяют вам получить к нему доступ. Это устанавливает cookie, которые Silverlight затем может использовать для доступа к файлу clientaccesspolicy.xml. Когда вы закрываете браузер, вы теряете cookie и, следовательно, получаете доступ к файлу.

...