【问题标题】:Authorized Flash Client to Java Server connection授权的 Flash 客户端到 Java 服务器的连接
【发布时间】:2011-03-19 23:15:47
【问题描述】:

我正在使用 Java 后端构建基于 Flash 的 Facebook 游戏,并且我计划使用 RESTful 方法来连接它们两者(不是持久套接字连接)。我正在使用 AS3 库将客户端连接到 Facebook,所以这是我存储会话信息的地方。但是,如何授权客户端连接回服务器?我不能打开回调 URL,因为这会让人们在不玩游戏的情况下操纵游戏状态。我需要确保呼叫来自有效的客户端并通过有效的会话。

目前,用户无法直接登录后端服务器——这一切都是通过客户端前端处理的。我可以通过后端可以验证其有效性的方式将 Facebook OAuth2 访问令牌传递给后端吗?这是否足以信任有效的前端连接?

我可以做一个两条腿的 OAuth 签名请求,或者只使用一个简单的共享密钥,但是密钥必须与 flash 客户端一起打包,这对于这个用例来说几乎没有用。

一定有人解决了这个问题,但我找不到。

【问题讨论】:

    标签: java flash security facebook oauth


    【解决方案1】:

    如果您使用 Java 作为后端,我会考虑使用 BlazeDS。它是一个很棒的 AMF 连接库(它是异步的,因此适合您的非持久套接字要求)。如果您在后端使用 Spring,我强烈建议您也使用Spring-Flex。它添加了许多好东西,使公开 AMF 服务变得轻而易举。此外,它还添加了挂钩以允许“轻松”集成 Spring Security。

    对于 oAuth 的东西,我会将 oAuth 部分移动到 Web 端,而不是 Flash 客户端(我想我理解的是你现在所做的)。通过这种方式,您可以在服务器端验证 Web 会话并保护包含 .swf 的页面。然后,当您的用户在您的代码中加载 .swf 时(假设您使用集成到 BlazeDS 中的 Spring Security),您可以在您的 cs:mx.messaging.ChannelSet 上调用 cs.authenticated。这会起作用,但可能比您想要的要多。

    【讨论】:

    • 对于将身份验证转移到客户端,我最担心的是将令牌传递给 Flash 客户端,以便我也可以从那里进行调用。我正在使用基于 oauth2 的 Facebook api。 spring-flex 支持吗?我以前使用过 spring 和 spring security,但从未使用过 spring-flex。
    【解决方案2】:

    我们在其中一个项目中遇到了类似的问题。我们最终做的是使用以下令牌传递方法:

    1) 新客户端连接到服务器并获取在 x 时间内有效的令牌。

    2) 客户端有一段混淆的代码,它使用一种算法来更改令牌(并且该算法以与服务器同步的某个频率更改)。客户端使用算法更改令牌并将其包含在对服务器的下一个请求中。

    3) 服务器知道原始令牌和算法,所以现在它可以检查新令牌是否有效并且它来自有效的客户端。

    4) 循环继续。

    这不是 100% 安全的,因为有人真的可以花时间分析通信并最终理解模式,但是你可以玩很多算法并经常更改它,让别人很难猜到它.

    希望这会有所帮助。

    附:我所说的使用它的应用程序已经投入生产了 5 年,每天获得约 30 万唯一用户,但还没有人进入。

    【讨论】:

      猜你喜欢
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      相关资源
      最近更新 更多