次の目的で、O-Auth の「Facebook と接続」を使用するモバイル アプリを作成しています。
1) Let Facebook deal with the authentication
2) Not force my users to register to another website
3) Get Facebook information
Facebook のサーバー側ログインを (JAVA で) 実装しました。
https://developers.facebook.com/docs/howtos/login/server-side-login/
ユーザーがFacebookに接続したら、ユーザーセッションを維持する方法がわかりません。
これがエンドツーエンドの流れです。間違っている場合は修正してください。
1) The user logs into my server (Android APP using WebView)
2) The server redirect the user to Facebook (with client_id, redirect_url, state and permissions)
3) The user is now facing Facebook's login dialog.
3.1) If the user deny: Facebook calls the redirect_url and notify the server that there was an error. (Flow Ends here)
3.2) If the user accept: Facebook calls the redirect_url (my server) with the state i've set (for CSRF protection) and a code.
4) The server contacts Facebook and send it the app_id, redirect_url, client_secret and code and in return, facebook calls the redirect_url with a valid token. This token allows the server to issue facebook API calls on behalf of the user.
これまでのところ、すべてがうまく機能しています。さて、主な質問 - セッション管理。
トークンを取得したので、それがどのユーザーに属しているかを把握する必要があります。これにより、データベースからデータを取得したり、新しいエントリを作成したりできます (新しいユーザーの場合)。
1) サーバーデータベースでユーザーを識別するために、どのような識別子を使用する必要がありますか? (Facebook API を呼び出して基本情報を取得し、そこからメールや一意の ID を抽出する必要がありますか?
2) この一意の ID を取得したら、ユーザーに再度連絡するにはどうすればよいですか? ステップ 2 で、サーバーは彼を Facebook にリダイレクトしました。これは、彼が Facebook への新しい接続を開き、サーバーに接続されなくなったことを意味します。彼がいなくなったので、どうすれば彼にクッキーを設定できますか? <-- *この部分が一番ややこしいです。*
3) どの時点で、ユーザーのリクエストにセッション ID (Cookie) を設定する必要があるので、次に彼が私に連絡したときに、それが誰であるかがわかります。
スタック オーバーフローは、私の問題を説明するための最良の例だと思います。「Facebookに接続」ボタンをクリックすると、突然、登録なしでスタックオーバーフローのユーザーになりました。スタック オーバーフローは、私が既に尋ねた質問を引き出す方法をどのように知っていますか? どうやって私を特定したの?そして、私が説明したチェーンのどの時点で、リクエストに Cookie が設定されましたか?
お時間をいただきありがとうございます