【发布时间】:2014-01-24 17:32:54
【问题描述】:
我想要求用户在访问我的 GAE (Google App Engine) 应用程序的某些部分时使用登录名/密码。我想限制对一组预定义用户的访问,例如在页面上,可以将新数据上传到数据存储区。
我发现 GAE 有 3 种方法可以解决这个问题,但看起来只有最后一种(最复杂的)可以解决我的问题:
-
使用部署描述符(
<security-constraint>in web.xml)。这不好,因为这些用户可以访问,即使作为 GAE 应用程序管理页面的查看者,他们可以在其中查看账单历史记录、浏览数据存储、日志等,这是我必须避免的。 使用联合登录 (Open ID) (https://developers.google.com/appengine/articles/openid) 并允许用户使用他们的 Google、Yahoo!或其他身份登录。这不是一个解决方案,因为我想限制一小部分用户(最多 5 个)的访问权限,并且不允许每个人都使用该应用程序。
另一种选择是创建仅可通过 HTTPS 访问的简单 自定义登录页面,并让用户在 POST 请求中发送用户名和密码(它可以很简单,因为我们有安全 https 连接)到 servlet,在 servlet 上生成一些具有指定有效性的 会话标识符 并使其成为每个后续请求的一部分。它还需要在用户每次发送 GET 或 POST 请求时手动检查会话标识符是否存在且未同时过期。
关于如何维护管理员帐户的任何其他/更好的建议? HttpSession 可以帮忙解决最后一个变种吗?
亲切的问候, 钢
【问题讨论】:
-
您在这里将两个完全独立的问题混为一谈,身份验证和授权。您可以将前两个解决方案(身份验证)中的任何一个与您自己的解决方案结合起来检查授权。执行此操作的最简单方法是在数据存储中维护允许用户的列表,并在用户登录时查找用户以检查权限,如下面的 Peter 和 Adam 建议的那样。
标签: google-app-engine authentication servlets httpsession google-openid