FacebookのSDKを使ったWebアプリケーションで一度認証済みでも毎回パスワードの入力画面を表示させる

FacebookSDKを使ってユーザ情報を扱うようなWebアプリケーションでは、
一度ユーザの情報を利用することを許可してもらう必要があるため
Facebook側のURLへ必要なパラメータを付けてリダイレクトし、
ユーザの意志で情報の利用の許可を行わせます。

ユーザがアプリケーションに対して一度認証すると
それ以降、Facebookにログインしていれば、
認証のダイアログは表示されなくなり、
そのままアプリーケーションへ戻ってくるようになります。

使う側からすれば毎回ダイアログがでるより、
最初の一度だけ表示されたほうが快適ではありますが、
共用のPCの場合、うっかりFacebookをログアウトし忘れたまま
他の人がそのアプリケーションを利用してしまった場合でも利用できてしまいます。

Facebookは個人情報が沢山含まれているSNSですので、
アプリケーションが扱う情報によっては、
うっかり他人に見られてしまってはまずいものもあるはずです。

そこで、一度認証している場合でもアプリケーションを利用する際には本人であることを確認させるために
パスワードの入力を求めるようにします。

AuthTypeの追加

今回はPHP SDKを利用した例を掲載します。
PHP SDKではFacebookインスタンスgetLoginUrlを叩くことで返り値にログイン用のURLが返ってきます。

facebook-getLoginUrl

getLoginUrlには、
認証後に戻ってくるページ、
アクセストークンを取得するためのパラメータのタイプ
などを連想配列で渡してあげます。


$facebook = new Facebook(array(
    'appId'  => APP_ID,
    'secret' => APP_SECRET,
));

$loginUrl = $facebook -> getLoginUrl(
array(
    'scope'     => APP_PERMISSION,
    'redirect_uri' => APP_CALLBACK,
    'response_type' => 'code',
    'auth_type' => 'reauthenticate'
    )
);

渡している値に見慣れないものがありますね。
'auth_type' => 'reauthenticate'
を追加しています。

これを追加することによって、
getLoginUrlで返ってきたURLへリダイレクトした際に
毎回パスワードの入力を求められるようになります。

参考:server-side-re-auth