安全使用GAE应用程序命名空间

时间:2010-08-31 14:35:53

标签: python google-app-engine namespaces

我希望将用户映射到帐户,然后让用户定向到与其帐户对应的名称空间

查看了appengine_config.py中的suggested example,似乎有一些建议的方法来确定名称空间应该是什么,即

  1. 服务器名称
  2. Google Apps域
  3. 曲奇
  4. 我希望根据数据存储区中的查找选择名称空间。即

    namespace = user.account.name
    

    对于与user关联的某个account对象,哪个帐户具有name字段。我想要实现这一目标的方式很少:

    1. 每个请求的数据存储查找
    2. 每个请求的memcache查找(当memcache过期时回退到数据存储区)
    3. 安全cookie数据
    4. 数据存储区查找速度很慢。是否有任何这样的预留与memcache查找?例如memcache.get('nslookup:%s' % user_id)user_id。 (我相信users对象在appengine_config.py)中按预期工作。

      或者,可以使用安全cookie来解决此问题。我对“安全”标志(即强制SSL)的安全性不满意。但是,我不确定如何最好地保护cookie中的数据。我认为对称encryption使用GAE中的密钥与PyCrypto签名是开始这条路径的一种方法。虽然这种模式已经vetted,但我特别感谢对此建议解决方案的任何想法。

      从思想观点来看,安全饼干似乎不是最佳途径;我已经期望拥有用户身份,我只需要从用户到他们的帐户的映射 - 在每个请求上加密,发送,存储,接收和解密映射都没有逻辑基础。 memcache选项似乎是三者中最好的,但我会感激思想和输入。我可以想到使用安全cookie的唯一原因是性能,或者如果appengine_config.py中没有memcache访问权限。

      对我的假设的想法,意见和挑战是最受欢迎的。

      感谢您的阅读。

      布赖恩

2 个答案:

答案 0 :(得分:1)

我认为安全的cookie是可行的,因为它们足够快。从Tornado中提取的基本实现就在这里(您只需要SecureCookie类并且可以忽略“会话”内容):

http://code.google.com/p/webapp-improved/source/browse/extras/sessions.py#104

答案 1 :(得分:1)

在性能方面,任何避免在每个请求上需要memcache或数据存储区查找的东西都将是最佳选择。但是,您对“安全”cookie的两个定义感到困惑:cookie规范中的“安全”标志要求cookie仅通过SSL发送,而在另一种意义上,“安全”cookie是无法修改的cookie用户无法察觉 - 这是本用例中最重要的内容。

没有必要加密内容,但是 - 你想要防止修改,而不是披露 - 所以如果你不能使用现有的库,你可以简单地将cookie的HMAC附加到它的末尾,使用您嵌入应用程序的密钥。在每个请求上验证HMAC将比使用memcache快得多。