近頃流行のOpensocialネタです。
mixiアプリやモバゲーなどでソーシャルゲームを作るにはOpensocialのOAuth認証で、署名をチェックするという処理があります。
リクエストのURLやパラメータなどから、アクセスの妥当性をチェックするというものなのですが、フレームワークを使っているとハマることがあるので、メモ代わりに書いておきます。
例えばCakePHPなどフレームワークの.htaccessではこのような形になっていることがあります。
このmod_rewriteの処理が「url」というGETパラメータを付けて署名認証をエラーにしてしまうのです。
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
回避するには簡単で、$_GETからunsetしてやればOKです。
// 余計なパラメータをunsetする
unset($_GET['url']);
//Build a request object from the current request
$request = OAuthRequest::from_request(null, null, array_merge($_GET, $_POST));
参考: mixi Developer Center 署名付きリクエストの検証 [developer.mixi.co.jp]
モバイルなどでconsumer keyを使った認証では、OAuth.phpでは$_SERVER[‘QUERY_STRING’]を使っているので、次のように一度ばらして再構築でいけました。
parse_str($_SERVER['QUERY_STRING'], $query_arr);
unset($query_arr['url']);
$_SERVER['QUERY_STRING'] = http_build_query($query_arr);
モバイル版の参考コードもここに書きたいところですが、各社ともモバイル版の情報はなぜか非公開らしいので自重しておきます。
上記はPHPの例ですが、基本どの言語でも変わらないはずです。
関連: