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
が完全一致チェックが行われるようになる