GAE的身份验证策略

时间:2015-04-22 20:36:44

标签: java google-app-engine authentication

我已将应用程序部署到Google App Engine。在应用程序中,有两个角色:标准用户和管理员。我有基于表单的身份验证设置,并且需要身份验证的网址(例如/ admin和/ account)被设置为需要任何角色(*),因此我可以确定Google已对其进行了身份验证。我有一个管理路径的过滤器设置,以及与后端业务逻辑对话的帐户路径,以查看用户是否在我的应用程序中有一个帐户,然后将其转发到他们请求的页面,或者在必要时重定向。

这似乎很麻烦,因为对于每个请求,过滤器都使用UserService来获取谷歌用户,以确定谷歌认证的人是否在应用程序中拥有一个帐户。我知道在部署到传统应用程序服务器的应用程序的上下文中,我实际上可以定义访问URL所需的应用程序级别角色,并且由于应用程序服务器将知道应用程序的角色/用户,这就足够了,但由于谷歌正在处理身份验证,我是否正确假设我必须按照每个请求处理访问要求,因为我现在使用过滤器?我选择使用过滤器来保持实际的servlet更清洁,以便我知道当客户端请求到达servlet时,它们已经过身份验证并被授权访问这些资源。

在会话中携带数据(用户是否经过身份验证以及他们是否是管理员或标准用户)是否明智?这是我能想到的唯一另一种选择。我不确定每个请求访问UserService的成本是多少,因为这反过来访问数据存储区。我认为必须有一种更好的方法来处理身份验证。

1 个答案:

答案 0 :(得分:1)

不确定它是否是最佳解决方案,但我们现在所做的是存储用户会话(我们自己的实现,而不是GAE),我们使用Objecitfy的缓存功能积极地缓存它。这样我们只能在登录/注销时访问数据存储区,之后的大多数查询几乎都是免费的(因为在我们的应用程序上使用标准会话时间,缓存刷新并不是真正的问题)