PDA

Просмотр полной версии : Error #2048: Security sandbox violation


projectx
20.03.2015, 00:56
Пытаюсь авторизироваться загруженным приложением на сервер vk.com, выдает ошибку

Error #2048: Security sandbox violation cannot load data from oauth.vk.com

Про кроссдоменные запросы вкурсе, что локально, что удаленно с серверов вк выдается данная ошибка.

В корне localhost crossdomain.xml


<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
</cross-domain-policy>


Пробовал еще много вариантов, что нашел в гугле, в итоге оставил этот грубый метод.

Сам код получения сессии

var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("https://oauth.vk.com/access_token?client_id=здесь_данные_авторизации");
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR,ioErrHandler);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,secErrorHandler);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,statusHttpHandler);

function statusHttpHandler(event:HTTPStatusEvent):void {
tf.htmlText = "<p>" + event.status + "</p>";
}

function ioErrHandler(event:IOErrorEvent):void {
tf.htmlText = "<p>Error load json</p>";
}

function secErrorHandler(event:SecurityErrorEvent):void {
tf.htmlText = "<p>" + event.text + "</p>";
}

function onComplete(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
tf.htmlText = "<p>" + loader.data + "</p>";
}

Пляски с бубном и добавление/комментирование политик безопасности ни к чему не привели


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


Кстати, специально установил пару приложений, чтобы подсмотреть через http://showmycode.com как у них реализовано, может я что-то не учел ни к чему не привели. Мало того, мой дебаг флеш плеер часто выплевывал подобные ошибки на уже прошедших модераторскую проверку и успешно опубликованных приложениях.

Подскажите пожалуйста, в какую сторону курить *facepalm*

Заранее благодарю.

С ув. Дмитрий

Добавлено через 4 минуты
Почему-то не дает отредактировать сообщение.

Добавлю, что флеш плеер обновил до самой последней версии, так как в результате длительного поиска натолкнулся на официальном адобовском сайте информацию об этом.

Добавлено через 5 минут
Еще добавлю, вот такая ошибку часто ловлю почти в любом приложении

Error #2044: Unhandled StatusEvent:. level=error, code=

Может поможет как-то

caseyryan
20.03.2015, 07:53
А почему у вас в файле политик указано secure = "false", при том что авторизация вк происходит по протоколу https (hypertext transfer protocol secure)?
https://oauth.vk.com/access_token?client_id=здесь_данные_авторизации
Скорее всего проблема в этом и есть. Плюс в тестовый файл политик неплохо бы добавить еще to-ports="*"

projectx
20.03.2015, 08:13
Да, у меня именно так с самого начало и было. Ввели в заблуждение некоторые ответы на stackoverflow

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

К сожалению не помогло. Загружал флешку, повторюсь, прямо на сам ВК и такая же проблема(

Добавлено через 35 минут
Выяснил, что для flash приложений oauth авторизация не требуется и запрос к API спокойно без ошибок начал работать. Только выдает json ответ

{"error":{"error_code":5,"error_msg":"User authorization failed: invalid access_token (4).","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"users.get"},{"key":"user_id","value":"4835..."},{"key":"v","value":"5.29"},{"key":"access_token","value":"e65811a40bd6d...............................805e0"}]}}

Передавал полученный sid

var request:URLRequest = new URLRequest("https://api.vk.com/method/users.get?user_id=" + flashVars["api_id"] + "&v=5.29&access_token=" + flashVars["sid"]);

caseyryan
20.03.2015, 08:56
Если это простая флешка, то лучше воспользуйтесь готовой контактовской библиотекой (http://vk.com/source/APIConnection.zip)
С ней все работает без лишних заморочек
https://vk.com/dev/Flash_SDK

К сожалению не помогло. Загружал флешку, повторюсь, прямо на сам ВК и такая же проблема(
Скорее всего файл просто закэшировался браузером. Почистите кэш после замены

projectx
20.03.2015, 09:55
Спасибо Вам Кейси Райан, разобрался буквально за минут 15 и все работает идеально!

dimarik
20.03.2015, 10:10
The URL policy file is located, by default, in the root directory of the target server, with the name
crossdomain.xml (for example, at www.example.com/crossdomain.xml). Flash application developers can
specify another location by calling the ActionScript loadPolicyFile() method. The URL policy file located
in the root directory is referred to as the master policy file.

Как ясно следует из этой цитаты, crossdomain.xml должен отдавать target server. Вы можете сами скачать https://oauth.vk.com/crossdomain.xml? У меня не получилось, потому что его там нет. Может быть вы знаете путь, отличный от дефолтного, по которому он лежит в https://oauth.vk.com? Если да, то можно явно загрузить с помощью loadPolicyFile() и дальше разбираться с его содержимым. Если же файла политики безопасности в принципе не существует в этом домене, то вы не сможете взаимодействовать с этим сервером через http/https.