Facebook OAuth redirect URI の制限モードについて

2017年12月にfacebookから Strict Redirect URI Matching なる警告が来ていた.

TL;DR

  • OAuth認証の時にredirect_uri に設定できるURIホワイトリスト管理されるようになる
  • URIの完全一致しか許さない制限モードが3月に有効化される
  • facebookの仕様どうりにURIパラメーターを付与しないとエラーになる

制限モードとは?

facebook developer site > 制限モードの有効化 から引用

制限モードのしくみ

制限モードでは、有効なOAuthリダイレクトURIリストとの完全一致を条件にすることによって、
リダイレクトURIのハイジャックを防ぎます。たとえば、リストにwww.example.comが含まれている場合、
制限モードではwww.example.com/tokenは許可されません。有効なOAuthリダイレクトURIリストに
存在しない余分なクエリパラメーターを含めることもできません。

制限モードが有効化された後はOAuth認証時にOAuthのリクエストを実行するときに redirect_uri を指定するが、これにパラメーターを付与することができなくなる。

redirect_uri にパラメータを付与しているプログラムがありOAuth認証のリクエスト側に対応が必要になった。

stateパラメータを利用する

redirect_uri は完全一致になるが、state パラメータが用意されているので、それを利用する

curl https://www.facebook.com/v2.11/dialog/oauth?
  client_id=1234567890
  &redirect_uri=http://example.com/facebook/loginCallBack
  &state=cgalw3fZDBjemdCtByb6NdMmYWxk9bkV

リダイレクトURLは次のようになる

http://example.com/facebook/loginCallBack?
  state=cgalw3fZDBjemdCtByb6NdMmYWxk9bkV

facebook側の設定

facebookの設定では、「有効なOAuthリダイレクトURI」を設定した後に、「リダイレクトURIに制限モードを使用」を有効にすると、redirect_uri が完全一致チェックが行われるようになる

f:id:yokotaso:20180111131440p:plain