API Facebook: Почему я могу загрузить изображение пользователя из одного домена, но не из другого? - PullRequest
1 голос
/ 11 апреля 2011

Изображение 1 на fbcdn-photos-a.akamaihd.net

Изображение 2 на fbcdn-sphotos-a.akamaihd.net

Файлы междоменных имен идентичны:

https://fbcdn -sphotos-a.akamaihd.net / crossdomain.xml

https://fbcdn -photos-a.akamaihd.net / crossdomain.xml

Я могу загрузить большие пальцы изображений (которые находятся на сервере 1), но я не могу загрузить полные изображения (которые находятся на сервере 2).Я получаю SecurityError: Ошибка № 2123: нарушение изолированной программной среды безопасности.

В течение 2 часов я играл с настройками LoaderContext, Security.allowDomain и Security.loadPolicyFile.Ничего не дает.

Ответы [ 5 ]

3 голосов
/ 11 апреля 2011

Я тоже боролся с этим несколько дней назад ... Но внезапно это сработало

добавляя это куда-то, когда мое приложение запускается:

        Security.loadPolicyFile("http://graph.facebook.com/crossdomain.xml");
        Security.loadPolicyFile("http://profile.ak.fbcdn.net/crossdomain.xml");
        Security.allowDomain("*");
        Security.allowInsecureDomain("*");

А потом я использовал это, чтобы получить картину:

public function getProfilePicture():void {
            var myLoader:Loader = new Loader();
            myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
                pic.bitmapData = Bitmap(myLoader.content).bitmapData;
            });
            var fileRequest:URLRequest = new URLRequest("http://graph.facebook.com/" + this.uid + "/picture");
            var lc:LoaderContext = new LoaderContext();
            lc.checkPolicyFile = true;
            myLoader.load(fileRequest, lc);
}
2 голосов
/ 11 апреля 2011

Если вы пытаетесь получить только изображение профиля пользователя, вы можете получить к нему незащищенный доступ с http:/graph.facebook.com/USERID/picture/. Но если вы говорите о любом другом изображении (фотографии и т. Д.), Вы можете сделать это только с домена, объявленного на странице приложения Facebook, вкладка «Интеграция с Facebook». Это предотвращает любые злонамеренные намерения получить доступ к данным вашего пользователя в случае, если кто-то получит ваши APP_ID и APP_SECRET.

1 голос
/ 19 мая 2013

Проблема, описанная здесь, заключается в том, что Graph API перенаправляет вас на один из доменов CDN Facebook. Вы должны загрузить междоменные политики из этих доменов в ваш Flash-клиент, чтобы иметь возможность вызывать их с помощью Security.loadPolicyFile("<protocol>://<domain>/crossdomain.xml");. Протокол тоже важен. Список этих доменов CDN недоступен, поэтому вы не можете включить его в приложение. Я описал аналогичную проблему с изображениями профиля в этой ошибке: http://developers.facebook.com/bugs/470699803010338 Было бы идеально, если бы Facebook предоставлял список доменов CDN для своих разработчиков через API, чтобы мы могли загружать соответствующие политики междоменных доменов, не допуская все или ставя под угрозу безопасность другими способами.

0 голосов
/ 14 мая 2012

Это сработало для меня:

loader.load(new URLRequest("https://graph.facebook.com/" + user.uid + "/picture?type=normal"), new LoaderContext(true, null, SecurityDomain.currentDomain));
0 голосов
/ 11 апреля 2011

Как говорится в сообщении об ошибке, вы пытаетесь загрузить что-то с другого сервера, что является нарушением безопасности. Это может показаться бессмысленным, поскольку вы знаете, что они идентичны, но только вы это знаете. Этот же принцип безопасности - это то, что предотвращает кражу js в браузере одним сайтом куки, который принадлежит другому. Если бы этого участника безопасности не существовало, тогда сеть была бы гораздо хуже, а кража личных данных - гораздо более серьезная проблема.

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