コンシューマのライブラリに追加した方が自然なのかなと思ったけど、機能的にはプロバイダだから、HTTP_OAuthProviderに追加。
mixiではSAPという呼び方をしてるけど、この用語はOpenSocial共通の言葉なんだろうか…?
Social Application Providerの略らしい。
とりあえずテストはmixiとモバゲーでやった。
mixiとモバゲーでは認証方法がちょっと違って、その差異もとりあえずは吸収しといた。
もし他のプラットフォームではまた別の方法だったりしたら困るけど。
Authorization headerにoauth_tokenとoauth_token_secretがあったらモバゲー方式。
なかったらmixi方式。
シグネチャ方式は、HMAC-SHA1とRSA-SHA1に対応。
↓HMAC-SHA1方式のドキュメント。(Mobile用)
mixi Developer Center (ミクシィ デベロッパーセンター) » OAuth Signatureの検証方法について
http://developer.mixi.co.jp/appli/appli_mobile/lets_enjoy_making_mixiappmobile/validate-oauth-signature
↓RSA-SHA1方式のドキュメント。(PC用)
mixi Developer Center (ミクシィ デベロッパーセンター) » 署名付きリクエストの検証
http://developer.mixi.co.jp/appli/pc/lets_enjoy_making_mixiapp/make_request/validating_signed_requests
使い方
これだけ。
SAP用だから、プロバイダ用のクラスをインスタンス化する必要も特にないかなと思ってStaticにした。
verifyメソッドを追加するために、裏側はなんだか気持ち悪い拡張をしてしまったような気がしなくもない。
<?php require_once 'HTTP/OAuthProvider.php'; $row = array( 'key' => 'アプリケーション各々のコンシューマキー', 'secret' => 'アプリケーション各々のコンシューマシークレット', 'publickey' => 'プロバイダのドキュメントとかに記載されてる公開鍵' ); $consumer = new HTTP_OAuthProvider_Consumer($row); try { HTTP_OAuthProvider::verify($consumer); echo "認証成功!"; } catch(Exception $e) { echo "認証失敗!"; }
HTTP_OAuthProvider - Openpear
http://openpear.org/package/HTTP_OAuthProvider
Sinatureの検証の参考URL
PHPの役立ちそうなサイトがなかった…。
代わりに、前にPerlでソーシャルアプリを作った時にお世話になったページを。
モバイルなプラットフォームでのOAuth Signatureの検証 - hide-k.net#blog
http://blog.hide-k.net/archives/2010/02/oauth_signature.php