FacebookのOAuthのアクセストークンについて

FacebookのOAuthのトークンについての覚え書き。

最近では、FacebookTwitter の OAuth認証を介して、ログイン機能を提供するWebサービスが大分増えてきましたよね。しかも、ID/PASSでのログインとは別に、おまけ程度にあるのではなく、Facebook or Twitter でしかログインできないなんてサービスもちらほらあります。

FacebookのOAuth認証を通して手に入るユーザーのアクセストークンは、ユーザーがパスワードを変更したタイミングとかで無効になるので、認証するたびに新しいトークンになってたら、差し替えておいた方が良いんじゃないかなという話を長ったらしくします。

Facebook のOAuth認証のフロー

割と適当に書いたシーケンス図(ぽい)もので確認しましょう。
アプリケーションの要件によって、異なると思いますが、Webアプリケーションだったら、大体こんなフローになると思います。

f:id:tell-k:20120125002219p:plain

これでユーザーはApplicationにログインできるようになります。2回目以降は、7のアクセストークンが戻ってきたタイミングで、DBに問い合わせを行い、アクセストークンが既に存在していれば、ログイン状態になるといった具合です。

アクセストークンの有効期限が切れる

  • Applicationが求めるスコープに「offline_access」を入れてあげないと、割と1時間位でアクセストークンが有効期限切れなる。
  • Applicationにログインしている状態で、有効期限切れが起きるとApplicationからFacebookのGraphAPIが利用できなくなります。ex) ウォールへの投稿ができない!!!

パスワード変更すると無効になる

  • パスワードを変更するとアクセストークンが無効になります。
  • つまりApplicationにログインしている状態で、別のブラウザでFacebook開いてパスワードを変更したら、ApplicationではGraphAPIを利用できなくて、アババババとなります。

どうするのが良いか

アクセストークンが切れたら、ユーザーに再認証してもらう意外に、正しいアクセストークンを手に入れる術はありません。なので再認証してもらうための案を考えてみましょう。

  • ログインの中に、アクセストークンの更新処理を組み込む
    • 毎回ログインする時はFacebook認証をするので、そのついでに、あたらしいアクセストークンに差し替えてしまう。
    • アクセストークンでDBを検索
    • なかったら8で取得するFacebookのプロフィールIDをキーにDB検索する
    • もしあればデータあれば、それは「1度ログインして、且つアクセストークンが変わった」データなので、ついでにアクセストークンも新しいものに変更してやる
    • まぁ普通に皆やってるんだろうけど、プロフィールIDとか付帯情報はとっておきましょうねという事。
  • Facebookの接続解除、再接続機能を実装する。
    • 単純にDB上のデータを削除して、再度いちから認証にしてもらう。

なんか、うまくまとめられないので今日はここまで