2009-10-27 30 views
5

Esto es *** increíble! Los programadores de Flash están familiarizados con el ejemplo:Autenticación básica con 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 ... genial ... eso realmente funciona. Como puede ver, añado manualmente una Autorización de encabezado para la autenticación HTTP básica. PERO ... si cambio el método de solicitud de POST a GET, el encabezado no se genera.

¿Hay alguien que conozca una solución? 1000x thx!

+0

He encontrado esto: http://www.abdulqabiz.com/blog/archives/2006/03/03/http-authentication-for-httpget-requests-using-actionscript-3/ – xpepermint

Respuesta

4

Me sorprende que incluso haya podido conseguir que funcione con una solicitud POST. En diciembre de 2007, Flash Player se actualizó para rechazar explícitamente el Authorization header. Supongo que es posible que lo hayan vuelto a permitir. Pero me sorprendería eso. Editar: según el comentario de @ derFunk, resulta que, de hecho, el encabezado se volvió a permitir posteriormente, aunque al enviarlo a un dominio diferente, debe estar explícitamente permitido en crossdomain.xml.

Más allá de los problemas específicos con el encabezado Authorization, estoy bastante seguro de que Flash Player solo enviará encabezados de solicitud personalizados con una solicitud POST. Lamento no tener un enlace para eso, pero en mi empresa usamos Flash Player extensivamente para trabajar con los servicios web de Restful, y hemos tenido que implementar todo tipo de soluciones para que todo funcione.

En pocas palabras, Flash Player tiene awful compatible con HTTP. De hecho, nuestro conjunto de soluciones se activa al enviar el encabezado de la solicitud X-Crippled-Client: true, que le dice a nuestros servicios que interpreten las solicitudes y envíen respuestas de manera truncada. Es un verdadero dolor en el trasero.

Lo siento, no puedo ser más útil ... ¡buena suerte!

+1

Más detalles sobre el encabezado de autorización se puede encontrar aquí: http://helpx.adobe.com/flash-player/kb/authorization-header-request-flash-player.html: "Comenzando con Adobe Flash Player 9.0.115.0 el encabezado Authorization se agregó a la lista negra de encabezados HTTP y, solo en esta versión, fue bloqueado por Flash Player. Para las versiones de Flash Player posteriores a 9.0.115.0, el encabezado Authorization no está bloqueado, pero el dominio de destino requiere un archivo crossdomain.xml para especificar que el encabezado Authorization está permitido, si es diferente del dominio que aloja el archivo SWF. " – derFunk

+0

@derFunk great info, gracias! –

3

@Flax: yup, no podría estar más de acuerdo con la seguridad del flash con encabezados HTTP. Pero hay una forma más de hacerlo, pero eso requiere un poco de trabajo. Intenta usar Socket en lugar de URLLoader, porque Socket no tiene ese tipo de restricciones. Entonces, para la solicitud HTTP, abra un socket al puerto 80 del servidor (http://yoursite.com/). Tan pronto como esté conectado al servidor, envíe todos sus encabezados de solicitud http. Luego, en SocketDataEvent, analiza los datos y lee (o descarta) los encabezados de respuesta, y continúa con los datos.

+0

Sí. ... hice esto ... pero ahora tengo un problema con la seguridad de dominios cruzados :). Los sockets harán el truco para los servidores que no son HTTP como el servidor de chat donde se puede satisfacer manualmente el flash con crossdomain (ejemplo: http://coderslike.us/ 2009/01/23/flash-socket-code-and-crossdomain-policy-serving /). – xpepermint

+1

aquí puede usar Security.loadPolicyFile ("http://www.yoursite.com/crossdomain.xml"); antes de conectarse en el zócalo – bhups

0

Puede enviar encabezados por métodos GET también, excepto si lo prueba en el Depurador de Flash Player independiente (no lo prueba en simple) v.11.4.402.265. Si abre su swf local en el navegador también funciona bien.

2

Así que esto es muy viejo, pero surgió mientras estaba buscando la manera de usar Parse.com con Flash Player.

Estoy desconcertado de que esto realmente funcione, pero para que Flash envíe encabezados en un comando GET, simplemente configúrelo como POST, pero ejecute una anulación.

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

Yo probé pensando que era una locura y no podía trabajar, pero lo hace!

Cuestiones relacionadas