Ошибка безопасности при попытке связи с Twitter из Flex - PullRequest
0 голосов
/ 09 октября 2010

Когда я пытаюсь запросить токен из Twitter:

                _consumer = new OAuthConsumer( _consumerKey, _consumerSecret );
                var oauthRequest:OAuthRequest = new OAuthRequest( "GET", AppConstants.TWITTER_REQUEST_TOKEN_URL, null, _consumer, null );
                var request:URLRequest = new URLRequest( oauthRequest.buildRequest( _signature ) );
                var loader:URLLoader = new URLLoader(   );
                loader.dataFormat = URLLoaderDataFormat.TEXT;  
                loader.addEventListener( Event.COMPLETE, requestTokenHandler );
                loader.load(request);

я получаю следующее сообщение об ошибке безопасности:

Security ERROR: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: http://localhost:3000/bin/testsite.swf cannot load data from http://twitter.com/oauth/request_token?oauth_consumer_key=....."]

Хотя я добавил следующее:

            Security.allowDomain("*");
            Security.loadPolicyFile("http://twitter.com/crossdomain.xml");

Странная вещь в том, что этого не происходит, когда я запускаю свое приложение в режиме отладки (из Flash Builder), это просто происходит, когда я вызываю свое приложение из localhot: 3000 (так как я использую Rails)!

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 10 октября 2010

Вы на правильном пути.Проблема здесь, как и во многих других веб-сервисах, заключается в том, что crossdomain.xml недостаточно разрешительный.Это верно для crossdomain.xml и любого домена, в котором нет файла crossdomain.xml.

Вот crossdomain.xml .

.


Чтобы у вас был доступ к НИЧЕМУ на twitter.com, вам необходимо загрузить SWF-файл с одного из доменов, перечисленных в allow-access-from.Поскольку вы, вероятно, не загружаете свой SWF-файл с сайта api.twitter.com, вам необходимо проксировать свои вызовы API Twitter с сервера за доменом, которым вы управляете.По сути, вы будете писать большую часть своего кода на серверном языке, таком как PHP, и выполнять вызовы из него с вашего SWF-файла.

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

Ознакомьтесь с техническими документами по безопасности Flash и для междоменных спецификаций для получения более подробной информации.

2 голосов
/ 10 октября 2010

Я не верю, что междоменная политика Twitter позволяет любому домену делать запросы на него. В этом случае вам нужно будет использовать прокси-сервер, такой как mod_proxy или BlazeDS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...