在客户端更改凭据以在Flex上进行基本身份验证

时间:2009-04-22 15:05:06

标签: flex authentication session basic-authentication active-script

我想让用户自动重新登录我的Flex应用程序,该应用程序使用基本身份验证

顺便说一句,我已经注意到这个StackOverflow question,这是相关的,但没有解决退出客户端的问题。

例如,在用户A登录后,用户B进入浏览器,进入登录屏幕(可能在新标签中)并登录。

这应该意味着我在HTTP标头中发送用户B的凭据,并且由于这些与用户A不同,服务器会记录这一事实并创建一个新的单独会话。

但是,Flex的HTTP代理会捕获标头并实际忽略这些新凭据。

Flex确实提供了一种告诉服务器注销的方法,并且Flex登录代码可以在每次发送凭据之前调用它,但这似乎是一个丑陋的解决方法。我希望能够做到这一点客户端。我还可以使用非标准头进行基本身份验证(因为我也控制了服务器端身份验证),但这似乎也是一个丑陋的解决方法。

是否有一些方法可以简单地在客户端结束Flex代码的会话?例如,这可以通过JavaScript实现。

有没有办法在客户端直接使用cookie,就像在JavaScript中一样?

据我所知,某些限制可能是出于安全方面的考虑,但我所有的通信都是针对“家庭”服务器,所以应该可以避免这些限制。

2 个答案:

答案 0 :(得分:1)

你在这里问几个不同的问题。

你实际上不能手动结束基本认证“会话”(至少不是我所知);充其量,您可以针对某种变量basic-auth域进行身份验证,这可能适用于您,也可能不适合您,但除此之外,您在浏览器实例的持续时间内仍然会遇到第一次身份验证的会话。通常不是最佳方式,除非您非常确定用户拥有该计算机,或者可以依赖于每次会话后关闭浏览器。

然后至少留下另外两个选项。第一种是使用URLRequest对象发送您的凭据(您引用的帖子,我写的,显示如何执行此操作),并让您的HTTP响应返回指示凭据被接受的内容 - 例如,GUID,也许,生成并存储在服务器上的某个会话表(在数据库意义上)中。然后,在连续的HTTP请求中,您可以在HTTP标头中发送该GUID,或者作为每个GET或POST请求中的值发送(例如,与Facebook处理其API客户端的方式类似),检查该值的时间性。服务器,如果一切顺利,继续。要“注销”,那么,您只需发送一个请求以使该GUID无效,在服务器上和Flex应用程序内执行必要的清理,一切都应该没问题:下一个用户可以坐下来,登录,进行身份验证,然后继续进行。

另一种方法是直接使用cookie。实际上,cookie机制实际上是在Flex中处理的,因为一切都是由浏览器代表你来回传递的。例如,如果您使用用户名和密码发送URLRequest,并且服务器使用任何类型的cookie进行响应,则您之后发出的每个请求都将打包并发送相同的cookie,因此在大多数情况下,您只需要做的就是从服务器解析初始响应(设置Flex应用程序的状态),假设cookie的持续存在,以及何时注销,发送URLRequest注销,终止服务器上的cookie,状态= 200进行Flex-app清理,依此类推。但是,直接访问cookie值并不是世界上最简单的事情。你可以使用ExternalInterface作为JavaScript的代理(这个在线的例子,在这里,我很确定),并以这种方式得到它们,但你甚至不必这样做。

希望这会有所帮助。祝你好运!

答案 1 :(得分:0)

另请注意this post,其中详细介绍了Flex为HTTP请求添加的一些令人难以置信的失真。