GeekFactory

int128.hatenablog.com

OpenID SSOの認証シーケンス

App EngineでOpenIDシングルサインオンを利用した場合のシーケンス図を書いてみました。OpenID Providerが「はてな」の例です。

開発者が用意するページは黄色の部分に示したログインページだけです。設定内容は OpenID認証によるシングルサインオン - GeekFactory で説明しています。

シーケンスを説明します。

  1. リクエストパスがsecurity-constraintにより保護されている場合、App Engineは認証状態をチェックする。
    • 認証済みの場合は、本来のリクエスト処理を実行する。
    • 未認証の場合は、ログインページ(/_ah/login_required)にリダイレクトする。
  2. ユーザはログインページでIdentifierを入力し、ログインサーブレット(/login)にPOSTする。
    • ログインページは開発者が用意する。
    • フォームの隠し属性にcontinueパラメータを保存しておく。これにより、本来のリクエストパスが引き継がれる。
  3. ログインサーブレットはApp EngineのLoginURLにリダイレクトする。
    • ログインサーブレットは開発者が用意する。
    • App EngineのLoginURLは UserService#createLoginURL() で生成できる。このURLはアクセスログに残らない。
  4. App EngineはOpenID Providerにリダイレクトする。
  5. OpenID Providerによる本人確認が行われる。
    • 本人確認の手段はProviderに任されている。
    • 認証成功の場合は、App Engineにリダイレクト(/_ah/openid_verify)を返す。
  6. App Engineは認証結果を検証する。
    • このURLはアクセスログに残らない。
    • 成功の場合は、本来のリクエスト処理を実行する。
    • 失敗の場合は、500エラーを返す。