Базовая аутентификация с Flash - PullRequest
6 голосов
/ 27 октября 2009

Это невероятно! Программисты Flash знакомы с примером:

var req:URLRequest = new URLRequest("http://yoursite.com/yourservice.ext");
req.method = URLRequestMethod.POST;
req.data = new URLVariables("name=John+Doe");

var encoder:Base64Encoder = new Base64Encoder();        
encoder.encode("yourusername:yourpassword");

var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
req.requestHeaders.push(credsHeader);

var loader:URLLoader = new URLLoader();
loader.load(req);

ОК ... здорово ... это действительно работает. Как видите, я вручную добавляю заголовок Авторизация для базовой HTTP-аутентификации. НО ... если я изменю метод запроса с POST на GET, заголовок не будет сгенерирован.

Кто-нибудь знает решение? 1000x thx!

Ответы [ 4 ]

5 голосов
/ 03 ноября 2009

Я удивлен, что вы даже смогли заставить его работать с запросом POST. В декабре 2007 года Flash Player был обновлен, чтобы явно запретить Authorization header. Я предполагаю, что возможно, что они с тех пор повторно позволили это. Но я был бы удивлен этим. Редактировать : согласно комментарию @ derFunk оказалось, что фактически заголовок впоследствии был повторно разрешен, хотя при отправке его в другой домен он должен быть явно разрешен в crossdomain.xml.

Помимо особых проблем с заголовком Authorization, я уверен, что Flash Player будет отправлять только заголовки пользовательских запросов с запросом POST. Извините, у меня нет ссылки на это, но в моей фирме мы широко используем Flash Player для работы с веб-службами Restful, и нам пришлось внедрять всевозможные обходные пути, чтобы все работало.

Итог, Flash Player поддерживает ужасный HTTP. Фактически, наш набор обходных путей активируется путем отправки заголовка запроса X-Crippled-Client: true, который сообщает нашим службам о необходимости интерпретировать запросы и отправлять ответы искаженными способами. Это настоящая боль в заднице.

Извините, я не могу быть более полезным ... удачи!

3 голосов
/ 03 ноября 2009

@ Flax: да, я не могу больше договориться о безопасности флэш-памяти с HTTP-заголовками. Но есть еще один способ сделать это, но это требует немного работы. Попробуйте использовать Socket вместо URLLoader, потому что в Socket нет таких ограничений. Поэтому для HTTP-запроса откройте сокет для порта 80 сервера (http://yoursite.com/). Как только он подключится к серверу, отправьте все заголовки HTTP-запроса. Затем в SocketDataEvent проанализируйте данные и прочитайте (или отбросьте) заголовки ответа и переход к данным.

2 голосов
/ 10 января 2014

Так что это очень старая версия, но она возникла, когда я искал способ использовать Parse.com с Flash Player.

Я сбит с толку, что это действительно работает, но чтобы заставить Flash отправлять заголовки в команде GET, просто установите его как POST, но запустите переопределение.

req.requestHeaders.push(new URLRequestHeader("X-HTTP-Method-Override", URLRequestMethod.GET));

Я попробовал это, думая, что это было сумасшествие и не могло работать, но это работает!

0 голосов
/ 10 октября 2012

Вы также можете отправлять заголовки методами GET, за исключением случаев, когда вы тестируете его в автономном отладчике Flash Player (не тестируйте на простом) v.11.4.402.265 . Если вы откроете локальный SWF-файл в браузере, он тоже будет работать.

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