【问题标题】:gae channel token as general access tokengae 通道令牌作为通用访问令牌
【发布时间】:2013-07-29 12:29:08
【问题描述】:

我有一个 Android 应用程序,它通过通道和 REST 与 GAE 服务器进行通信。我可以像这样使用通道令牌作为通用访问令牌吗:

  1. 客户端向 servlet 提供凭据
  2. servlet 创建通道并提供令牌
  3. 客户端执行 REST 调用,提供通道令牌作为访问令牌
  4. 通过渠道的其他通信

对于 3,我想保持会话免费。所以我需要从通道令牌中解密客户端 ID。客户端 ID 可能已加密到令牌中,但我没有找到任何 API 调用来提取它。

是否有任何其他 API 可用于获取通道令牌的客户端 ID?

否则我需要维护通道令牌和客户端 ID 的映射,这会降低令牌的价值。内存缓存是否是维护此映射的适当机制?

谢谢

【问题讨论】:

    标签: google-app-engine memcached token channel-api


    【解决方案1】:

    这是一个有趣的概念。如果你小心,它可以工作。

    首先,只有通过 HTTPS 传输令牌才是安全的。

    令牌和频道超时,因此您必须经常重新创建频道。

    由于互联网连接不佳,频道有点不稳定。如果您失去了互联网连接,有时该频道在之后仍然可以工作,有时您需要重新创建它。

    无法通过访问令牌验证或获取您的客户端 ID。因此,要将其用作安全性,您必须不向原始请求返回任何数据,而只需将数据发送到通道。此外,您需要在服务器上存储自己的客户端 ID 和访问令牌之间的映射。请记住,这将是不准确的,因为在服务器端很难判断令牌是否已超时。在大多数情况下,如果您确实需要数据,单独的 memcache 并不是一个合适的机制,您会希望它由 datastore 支持,以防 memcache 被刷新。

    我认为最大的麻烦是您需要手动将您的 REST 调用请求与您稍后在通道上返回的数据相关联。您可以使用增量计数器作为 id 轻松完成此操作,但您必须处理没有得到回复而必须重试等情况。如果您使用会话 id,可能会有更简单的方法。

    【讨论】:

    • 感谢您的回答。当然,所有通信都将通过 SSL。为什么我不应该对 REST 调用使用 HTTP 响应? servlet 知道谁请求并且可以直接响应。直接从令牌中读取客户端 ID 是最简单的,就像大多数其他令牌一样,它是对其进行编码的。 Memcache 是瞬态的,令牌和通道也是如此。因此,如果其中任何一个都消失了,那么客户端需要请求一个新频道。
    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 2022-01-26
    • 1970-01-01
    • 2013-10-23
    • 2012-03-04
    • 2019-02-08
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多