0

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

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

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

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

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

谢谢

4

1 回答 1

0

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

对于初学者,只有通过 HTTPS 传输令牌才是安全的。

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

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

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

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

于 2013-07-29T14:54:19.040 回答