前回のプロジェクトでも同様の要件がありました。GWTフロントエンドを備えたGAEバックエンドとAndroid/iPhoneクライアントです。また、ユーザーの資格情報を保存したくありませんでした。
そのため、OpenIDを使用することにしました。これは、残念ながらWeb標準であり、モバイルデバイスではうまく機能しませんが、実行可能です。
GAE側では、OpenIDを提供するフェデレーションログインを有効にするだけです。
モバイルデバイスでは、ユーザーがログインする必要がある場合、OpenIDオーセンティケーター(Google、Yahooなど)のリストを提示します。次に、ネイティブブラウザ(埋め込みブラウザではない)を開き、選択したOpenID認証サイトにユーザーを誘導します。利点は、通常、ユーザーのブラウザにはすでにユーザー名/パスが記憶されているため、この手順ではユーザーが1つのボタンを押すだけで済みます。
これはすべて非常に簡単です。ここで注意が必要な部分があります。ユーザーがログインを確認すると、OpenIDはGAEリターンURLにリダイレクトします(リクエストが行われたときにこのURLを提供する必要があります)。このURLに、次のようなカスタムURLを作成します。
yourappname://usrname#XXXYYYZZZ
ここで、XXXYYYZZZZは認証トークンです。このトークンは、ACSID Cookieとして保存されているリターンページから取得します。JSPを使用してこのCookieを読み取り、上記のカスタムURLにラップしました。
次に、AndroidアプリとiPhoneアプリを登録してyourappname://URLを処理します。これにより、ユーザーがこのリンクをクリックすると、アプリが呼び出され、リンクが渡されます。このリンクからユーザー名とトークンを抽出し、GAEバックエンドへのRESTリクエストで使用します。
他にご不明な点がございましたら、この投稿を更新させていただきます。
アップデート:
本番AppEngineのユーザーセッションCookieの名前ACSIDは、開発AppEngineサーバーのユーザーセッションCookieの名前dev_appserver_loginです。