【问题标题】:Changing credentials on client-side for Basic Authentication on Flex在客户端更改 Flex 上基本身份验证的凭据
【发布时间】:2010-10-21 03:10:12
【问题描述】:

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

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

例如,用户 A 登录后,用户 B 来到浏览器,进入登录屏幕(可能在新选项卡中)并登录。

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

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

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

有什么方法可以简单地从 Flex 代码结束客户端会话?例如,这可以通过 JavaScript 实现。

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

我了解某些限制可能是出于安全考虑,但我所有的通信都是与“家庭”服务器通信,因此应该可以避免这些限制。

【问题讨论】:

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


    【解决方案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 应用程序清理,等等。不过,直接访问 cookie 值并不是世界上最简单的事情。您可以使用 ExternalInterface 作为 JavaScript 的代理(我敢肯定,这里有在线和这里的示例),并以这种方式获取它们,但很有可能您甚至不必这样做。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-04
        • 1970-01-01
        • 2023-02-19
        • 2011-10-27
        • 1970-01-01
        相关资源
        最近更新 更多