2009-10-27 23 views
5

Das ist *** unglaublich! Flash-Programmierer sind mit dem Beispiel vertraut:Grundlegende Authentifizierung mit 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 ... großartig ... das funktioniert wirklich. Wie Sie sehen können, füge ich manuell eine Header-Berechtigung für die einfache HTTP-Authentifizierung hinzu. ABER ... wenn ich die Anforderung metod von POST zu GET ändere, wird die Kopfzeile nicht generiert.

Gibt es jemanden, der eine Lösung kennt? 1000x thx!

+0

Ich fand dies: http://www.abdulqabiz.com/blog/archives/2006/03/03/http-authentication-for-httpget-requests-using-actionskript-3/ – xpepermint

Antwort

4

Ich bin überrascht, Sie haben es sogar geschafft, es mit einer POST Anfrage zu arbeiten. Im Dezember 2007 wurde Flash Player aktualisiert, um die Authorization header explizit zu verbieten. Ich denke, es ist möglich, dass sie es seitdem wieder erlaubt haben. Aber ich wäre überrascht. Edit: nach @ derFunk-Kommentar stellt sich heraus, dass der Header in der Tat wieder erlaubt wurde, obwohl es beim Senden in eine andere Domäne explizit in crossdomain.xml erlaubt werden muss.

Über spezifische Probleme mit der Authorization Kopfzeile hinaus, bin ich ziemlich sicher, dass Flash Player nur benutzerdefinierte Anfrage Header mit einer POST Anfrage senden wird. Es tut mir leid, dass ich keinen Link dafür habe, aber in meiner Firma verwenden wir Flash Player ausgiebig, um mit Restful Web Services zu arbeiten, und wir mussten alle Arten von Workarounds implementieren, um die Dinge zum Laufen zu bringen.

Unterm Strich Flash Player hat schrecklich Unterstützung für HTTP. In der Tat wird unsere Problemumgehung aktiviert, indem der Anforderungsheader X-Crippled-Client: true gesendet wird, der unseren Diensten die Interpretation von Anforderungen und das Senden von Antworten in verfälschter Form anzeigt. Es ist ein echter Schmerz im Hintern.

Tut mir leid, ich kann nicht hilfsbereiter sein ... viel Glück!

+1

Weitere Details auf der Autorisierung Header finden Sie hier: http://helpx.adobe.com/flash-player/kb/authorization-header-request-flash-player.html: "Beginnend mit Adobe Flash Player 9.0.115.0 wurde der Berechtigungsheader zur Blacklist hinzugefügt HTTP-Header und wurde nur in dieser Version von Flash Player blockiert, für Flash Player-Versionen später als 9.0.115.0, der Berechtigungsheader ist nicht blockiert, aber die Zieldomäne erfordert eine crossdomain.xml-Datei, um anzugeben, dass der Berechtigungsheader zulässig ist, wenn er sich von der Domäne unterscheidet, die die SWF-Datei hostet. " – derFunk

+0

@derFunk great info, thanks! –

3

@Flax: yup, ich konnte nicht mehr über Flash-Sicherheit mit HTTP-Headern zustimmen. Aber es gibt noch einen Weg, dies zu tun, aber das erfordert ein bisschen Arbeit. Versuchen Sie Socket anstelle von URLLoader zu verwenden, da Socket diese Art von Einschränkungen nicht aufweist. Öffnen Sie daher für die HTTP-Anforderung einen Socket an Port 80 des Servers (http://yoursite.com/). Sobald es mit dem Server verbunden ist, senden Sie alle Ihre HTTP-Request-Header. Analysieren Sie anschließend in SocketDataEvent die Daten und lesen (oder verwerfen) Sie die Antwortheader und fahren Sie mit den Daten fort.

+0

Ja. .. ich habe das gemacht ... aber jetzt habe ich ein Problem mit der crossdomain security :) Sockets machen den Trick für Nicht-HTTP Server wie Chat Server, wo man flash mit crossdomain manuell befriedigen kann (Beispiel: http://coderslike.us/ 2009/01/23/flash-socket-code-und-crossdomain-policy-serving /). – xpepermint

+1

Hier können Sie Security.loadPolicyFile ("http://www.yoursite.com/crossdomain.xml") vor dem Verbinden verwenden auf dem Sockel. – bhups

0

Sie können Header auch mit GET-Methoden senden, außer wenn Sie es auf dem eigenständigen Flash Player Debugger testen (nicht auf einfach testen) v.11.4.402.265. Wenn Sie Ihr lokales swf im Browser öffnen, funktioniert es auch gut.

2

Also das ist super alt, aber es kam, während ich nach einer Möglichkeit suchte, Parse.com mit dem Flash Player zu verwenden.

Ich bin verblüfft, dass dies tatsächlich funktioniert, aber um Flash zu senden Kopfzeilen in einem GET-Befehl, legen Sie es einfach als POST, aber eine Überschreibung ausführen.

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

Ich versuchte es zu denken, dass es verrückt war und unmöglich funktionieren könnte, aber es tut!

Verwandte Themen