使用Flash进行基本认证

时间:2009-10-27 14:12:25

标签: flash http authentication rest

这令人难以置信! 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身份验证。但是......如果我将请求metod从POST更改为GET,则不会生成标头。

有没有人知道解决方案? 1000x thx!

4 个答案:

答案 0 :(得分:4)

我很惊讶您甚至能够使用POST请求来使用它。 2007年12月,Flash Player已更新为明确禁止Authorization header。我想他们可能已经重新允许了它。但我会对此感到惊讶。 编辑:根据@ derFunk的评论,事实证明事实上该标题随后被重新允许,但在将其发送到其他域时,必须在crossdomain.xml中明确允许。

除了Authorization标头的特定问题之外,我非常确定Flash Player只会发送带有POST请求的自定义请求标头。对不起,我没有这方面的链接,但在我的公司,我们广泛使用Flash Player来处理Restful Web服务,我们必须实施各种解决方法以使工作正常。

总的来说,Flash Player对HTTP有糟糕支持。实际上,我们的变通方法是通过发送请求标头X-Crippled-Client: true来激活的,该标头告诉我们的服务解释请求,并以错误的方式发送响应。这是一个真正的痛苦。

抱歉,我不能帮助更多...祝你好运!

答案 1 :(得分:3)

@Flax:是的,我对HTTP标头的Flash安全性表示赞同。但还有一种方法可以做到这一点,但这需要一些工作。尝试使用Socket而不是URLLoader,因为Socket没有这种限制。因此,对于HTTP请求,打开一个到服务器端口80的套接字(http://yoursite.com/)。一旦连接到服务器,发送所有http请求标头。然后在SocketDataEvent上,解析数据并读取(或丢弃)响应头,然后继续处理数据。

答案 2 :(得分:2)

所以这是超级老了,但是当我在寻找一种方法将Parse.com与Flash Player一起使用时,它就出现了。

我很困惑,这实际上有效,但要让Flash在GET命令中发送标头,只需将其设置为POST,但运行覆盖。

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

我试着认为这很疯狂,无法工作,但确实如此!

答案 3 :(得分:0)

您也可以通过GET方法发送标头,除非您在独立的Flash Player调试器上测试它(不要在简单测试中) v.11.4.402.265 。如果您在浏览器中打开本地swf,它也可以正常工作。