2

我有一个嵌入(通过小工具)在 Google 站点中的 Google App Engine Java 应用程序。该应用程序是为 Google Apps 客户构建的,因此设置为要求对该客户的域进行 Google 身份验证 - 就像它嵌入的站点一样。

一般来说,这个应用程序只能在网站内使用。用户不必显式登录到应用程序 - 它从父框架继承他们的登录会话(假设第三方 cookie 在浏览器中未被阻止)。

根据文档,我们使用标准UserService模式:

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

if (user != null) {
    // do ALL the things!
} else {
    resp.sendRedirect(userService.createLoginURL(req.getRequestURI()); 
}

登录用户进入域的SACSIDcookie 集,myapp.appspot.com即 cookie 的 HTTPS 版本ACSID

当用户退出包含站点时,通过单击其 Google 帐户中的标准“退出”按钮,用户现在将退出其 Google 帐户,但他们仍然可以访问该应用程序。userService.isUserLoggedIn()也返回真。

(我们不能让用户使用 App Engine 注销 URL 注销,因为通常他们甚至不知道他们正在使用 App Engine 应用程序 - 它只是嵌入在网站上的内容。)

如果您通过直接浏览 servlet 而不是站点来重现此问题,然后在用户注销后大约 2-3 分钟退出您的 Google 帐户,UserService 会检测到这一点并按预期将用户重定向到登录屏幕. 但是,在人们可能会在短时间内注销父站点然后再次登录的情况下,存在人们在应用程序中获得错误权限级别的情况。

我们如何才能立即检测到这一点并做出适当的反应?

4

0 回答 0