2009-10-27 31 views
5

To jest niewiarygodne! Flashowi programiści są zaznajomieni z przykładem:Podstawowe uwierzytelnianie za pomocą 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); 

OK ... świetnie ... to naprawdę działa. Jak widzisz, ręcznie dodaję nagłówek Autoryzacja dla podstawowego uwierzytelniania HTTP. ALE ... jeśli zmienię metodę żądania z POST na GET, nagłówek nie zostanie wygenerowany.

Czy jest ktoś, kto zna rozwiązanie? 1000x thx!

+0

Znalazłem to: http://www.abdulqabiz.com/blog/archives/2006/03/03/http-authentication-for-httpget-requests-using-actionscript-3/ – xpepermint

Odpowiedz

4

Jestem zaskoczony, że udało Ci się go uruchomić z żądaniem POST. W grudniu 2007 roku Flash Player został zaktualizowany, aby wyraźnie uniemożliwić Authorization header. Sądzę, że możliwe, że od tamtej pory pozwolili na to. Ale byłbym tym zaskoczony. Edytuj: zgodnie z komentarzem @ derFunk, okazuje się, że w rzeczywistości nagłówek został później ponownie dozwolony, chociaż przy wysyłaniu go do innej domeny musi być wyraźnie dozwolony w crossdomain.xml.

Poza konkretnymi problemami z nagłówkiem Authorization, jestem prawie pewien, że Flash Player będzie wysyłać tylko nagłówki żądań niestandardowych z żądaniem POST. Przykro mi, że nie mam linku do tego, ale w mojej firmie intensywnie używamy Flash Playera do pracy z Restful Web Services, i musieliśmy wdrożyć wszystkie rodzaje obejść, aby wszystko działało.

Podsumowując, Flash Player ma straszne wsparcie dla HTTP. W rzeczywistości nasz zestaw obejścia jest aktywowany przez wysłanie nagłówka żądania X-Crippled-Client: true, który nakazuje naszym usługom interpretowanie żądań i wysyłanie odpowiedzi w sposób zniekształcony. To prawdziwy ból w tyłku.

Przykro mi, ale nie mogę być bardziej pomocny ... Powodzenia!

+1

Więcej informacji na temat nagłówka Authorization można znaleźć tutaj: http://helpx.adobe.com/flash-player/kb/authorization-header-request-flash-player.html: "Począwszy od Adobe Flash Player 9.0.115.0 nagłówek Authorization został dodany do czarnej listy nagłówków HTTP i tylko w tej wersji został zablokowany przez Flash Player, dla wersji Flash Player późniejszej niż 9.0.115.0, nagłówek Authorization nie jest blokowany, ale domena docelowa wymaga pliku crossdomain.xml, aby określić, że nagłówek Authorization jest dozwolony, jeśli jest inny niż domena przechowująca plik SWF. " – derFunk

+0

@derFunk Świetne informacje, dziękuję! –

3

@Flax: tak, nie mogłem zgodzić się więcej na temat bezpieczeństwa Flasha z nagłówkami HTTP. Ale jest jeszcze jeden sposób, aby to zrobić, ale wymaga to trochę pracy. Spróbuj użyć Socket zamiast URLLoader, ponieważ Socket nie ma takich ograniczeń. Tak więc dla żądania HTTP otwórz gniazdo do portu 80 serwera (http://yoursite.com/). Natychmiast po podłączeniu do serwera wyślij wszystkie nagłówki żądań http. Następnie w SocketDataEvent, przeanalizuj dane i odczytaj (lub odrzuć) nagłówki odpowiedzi i kontynuuj dane.

+0

Tak. ... zrobiłem to ... ale teraz mam problem z zabezpieczeniami crossdomain :). Gniazda zrobią lewę dla serwerów innych niż HTTP, takich jak serwer chat, gdzie można ręcznie obsłużyć flash z crossdomain (przykład: http://coderslike.us/ 2009/01/23/flash-socket-code-and-crossdomain-policy-serving /). – xpepermint

+1

tutaj możesz użyć Security.loadPolicyFile ("http://www.twojwitryna.com/crossdomain.xml") przed połączeniem na Socket. – bhups

0

Możesz również wysyłać nagłówki metodami GET, chyba że przetestujesz je na samodzielnym Flash Player Debugger (nie testuj na prostym) v.11.4.402.265. Jeśli otworzysz lokalny plik SWF w przeglądarce, działa on również dobrze.

2

To jest bardzo stary, ale pojawił się, gdy szukałem sposobu na użycie Parse.com z Flash Player.

Jestem zaskoczony, że to faktycznie działa, ale aby Flash wysyłał nagłówki w poleceniu GET, ustaw je jako POST, ale uruchom override.

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

Próbowałem myśleć, że to było szalone i nie może pracować, ale tak jest!

Powiązane problemy