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());
}
ログインしたユーザーはSACSID
、ドメインの Cookie セット (Cookiemyapp.appspot.com
の HTTPS バージョン) を取得しますACSID
。
ユーザーが Google アカウントの標準の [ログアウト] ボタンをクリックして、含まれているサイトからログアウトすると、ユーザーは Google アカウントからログアウトされますが、アプリケーションには引き続きアクセスできます。userService.isUserLoggedIn()
も true を返します。
(App Engine ログアウト URL を使用してユーザーをログアウトさせることはできません。一般に、ユーザーは App Engine アプリケーションを使用していることさえ知らないためです。これは、サイトに埋め込まれたコンテンツにすぎません。)
サイトではなくサーブレットを直接参照してこれを再現し、ユーザーがサインアウトしてから約 2 ~ 3 分後に Google アカウントからログアウトすると、UserService がこれを検出し、期待どおりにユーザーをログイン画面にリダイレクトします。 . ただし、ユーザーが親サイトからログオフしてすぐに再度ログインする可能性がある状況では、ユーザーがアプリケーションで間違った特権レベルを取得している場合があります。
どうすればこれを即座に検出し、適切に対応できるでしょうか?