Python GAE应用程序命名空间的安全使用
我希望将用户映射到帐户,然后将用户定向到与其帐户对应的命名空间 从中查看之后,似乎有一些建议的方法可以确定名称空间应该是什么,即Python GAE应用程序命名空间的安全使用,python,google-app-engine,namespaces,Python,Google App Engine,Namespaces,我希望将用户映射到帐户,然后将用户定向到与其帐户对应的命名空间 从中查看之后,似乎有一些建议的方法可以确定名称空间应该是什么,即 服务器名 谷歌应用程序域 饼干 我希望根据数据存储中的查找选择名称空间。i、 e namespace = user.account.name 对于链接到帐户的某些用户对象,哪个帐户具有名称字段。我提出了几种方法来实现这一点: 对每个请求进行数据存储查找 每个请求的memcache查找(memcache过期时回退到数据存储) 安全cookie数据 数据存储查找速度会慢
namespace = user.account.name
对于链接到帐户
的某些用户
对象,哪个帐户具有名称
字段。我提出了几种方法来实现这一点:
memcache.get('nslookup:%s'%user\u id)
,给定用户id
。(我相信该对象在appengine\u config.py
中可以按预期工作)
或者,可以使用安全cookie来解决此问题。我对“安全”标志(即强制SSL)的安全性不满意。但是,我不确定如何最好地保护cookie中的数据。我认为在GAE中使用密钥并使用PyCrypto进行对称签名是开始这条路径的一种方法。尽管这种模式一直存在,但我非常感谢您对这一建议解决方案的任何想法
从理想的角度来看,安全的cookies似乎不是最好的途径;我已经期望拥有用户身份,我所需要的只是从用户到他们帐户的映射-没有逻辑基础来加密、发送、存储、接收和解密每个请求的映射。memcache选项似乎是三个选项中最好的一个,但我非常感谢您的想法和意见。我能想到的使用安全cookie的唯一原因是性能,或者如果在appengine\u config.py
中没有memcache访问权限
非常欢迎对我的假设提出想法、意见和挑战
谢谢你的阅读
Brian我认为安全的cookies是一条出路,因为它们足够快。这里是从Tornado中提取的一个基本实现(您只需要SecureCookie类,可以忽略“会话”内容):
就性能而言,任何避免对每个请求进行memcache或数据存储查找的方法都将是最佳选择。但是,您混淆了“安全”cookie的两个定义:cookie规范中的“安全”标志要求cookie仅通过SSL发送,而从另一个意义上说,“安全”cookie是用户无法检测到的修改,这在本用例中是最重要的
不过,不需要加密内容——您希望防止修改,而不是泄露——因此,如果您无法使用现有库,您只需使用嵌入到应用程序中的密钥将cookie的HMAC附加到库的末尾即可。在每个请求上验证HMAC将比使用memcache快得多。在数据存储中查找记录时使用什么?那个记录在哪个命名空间中?另外,您是否确定每个用户只需要访问自己的数据?如果用户通常读取或写入其他用户可以访问的数据,则每个用户的名称空间可能不是最好的选择。@尼克·约翰逊:我还没有决定使用什么来查找数据存储中的记录(假设它会在那里,我想它会在那里);它必须位于“主”命名空间中。名称空间不是每个用户,而是每个帐户(即用户集)。跨帐户访问将由代理请求处理。我的观点是,如果您有办法构造一个键来查找数据存储中的记录,您可以简单地使用该值作为名称空间名称,而不是进行查找。至于“代理请求”,我希望您不是指使用urlfetch向自己发出请求——您只需更改请求中的默认名称空间即可!谢谢你的回复。我当然认为安全cookies是实现这一点的标准方法。