App EngineでOpenIDシングルサインオンを利用した場合のシーケンス図を書いてみました。OpenID Providerが「はてな」の例です。
開発者が用意するページは黄色の部分に示したログインページだけです。設定内容は OpenID認証によるシングルサインオン - GeekFactory で説明しています。
シーケンスを説明します。
- リクエストパスがsecurity-constraintにより保護されている場合、App Engineは認証状態をチェックする。
- 認証済みの場合は、本来のリクエスト処理を実行する。
- 未認証の場合は、ログインページ(/_ah/login_required)にリダイレクトする。
- ユーザはログインページでIdentifierを入力し、ログインサーブレット(/login)にPOSTする。
- ログインページは開発者が用意する。
- フォームの隠し属性にcontinueパラメータを保存しておく。これにより、本来のリクエストパスが引き継がれる。
- ログインサーブレットはApp EngineのLoginURLにリダイレクトする。
- App EngineはOpenID Providerにリダイレクトする。
- OpenID Providerによる本人確認が行われる。
- 本人確認の手段はProviderに任されている。
- 認証成功の場合は、App Engineにリダイレクト(/_ah/openid_verify)を返す。
- App Engineは認証結果を検証する。
- このURLはアクセスログに残らない。
- 成功の場合は、本来のリクエスト処理を実行する。
- 失敗の場合は、500エラーを返す。