OAuth 1.0aの実装に悩んだことのあるPHPerのみなさん、こんばんは。
2月になって、デブサミのmixiのなんちゃらやらこういう記事でみんなOAuth 2.0のことが気になってしょうがない今日この頃ですね。
@a_kimuraさんの記事, いいですね。
しかし、今日はOAuth 1.0aの話です。
PHPのOAuth 1.0対応ライブラリ
みなさんは、OAuth 1.0aを実装するとき、どのライブラリ/コードを利用していますか?
OAuth 1.0での開発を経験された方なら、おそらく誰しも署名と複雑な認証フローには苦しめられたのではないでしょうか?
この仕組みが複雑なため、OAuthクライアントを作成するためにはOAuthのライブラリが必須でした。しかし複雑なため、ライブラリにバグが存在することもしばしばありました。ライブラリが存在しない言語でOAuthを使用したい開発者は諦めざるを得ないような状況でした。
OAuth 2.0でWebサービスの利用方法はどう変わるか(1/3)- @IT
PHPだとどうでしょう。
OAuthのサイトにも少し書いてあります。
この辺りですね。
- http://oauth.googlecode.com/svn/code/php/example/
- http://php.net/oauth
- http://pear.php.net/package/HTTP_OAuth
- http://framework.zend.com/wiki/pages/viewpage.action?pageId=37957
一番上のOAuth.phpは割と有名で私もPHPでOAuthの署名を作成する方法に関するエントリを書いてみたりもしましたが、これが一番使いやすいかと言われたらそうでもないと思う。
そこで、今日はPECLのOAuthライブラリを少し見てみます。いつか下の2つも試します。
PECLのOAuthライブラリでY!JのOAuthに挑戦
使い方は、twitter OAuthなどを試されている方がいるので、それを参考にするといいでしょう。
- http://labs.unoh.net/2010/02/twitter-xauth-with-pecl-oauth.html
- http://straighten.jp/2010/04/pecl%E3%81%AEoauth%E3%81%A7twitter-oauth/
あ、ここにも
ということで、使い方。
こんな感じで始まります。
$oauth = new OAuth($consumerkey,$consumersecret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
http://www.php.net/manual/ja/oauth.construct.php
RequestTokenの取得
$request_token_info = $oauth->getRequestToken($request_token_url,$callback_url);
AccessTokenの取得
$oauth->setToken($request_token,$request_token_secret); $access_token_info = $oauth->getAccessToken($access_token_url,'',$_GET['oauth_verifier']);
http://www.php.net/manual/ja/oauth.getaccesstoken.php
1個目のパラメータはエンドポイント、3個目のパラメータはOAuth Verifierの値です。
2個目のパラメータは空ですが、これはあとで説明します。
リソースアクセス
$oauth->setToken($access_token,$access_token_secret); $oauth->fetch($api_url);
http://www.php.net/manual/ja/oauth.fetch.php
AccessTokenとSecretをセットしてfetchするだけ。
APIアクセスのところもGETのクエリパラメータぐらいならしれっと対応しているっぽいです。
AccessTokenの更新
Y!Jはhttp://oauth.googlecode.com/svn/spec/ext/session/1.0/drafts/1/spec.htmlを採用しています。
これは、OAuth 2.0のRefresh Token周りの仕様のようなものですね。
$oauth->setToken($access_token,$access_token_secret); $access_token_info = $oauth->getAccessToken($access_token_url, $oauth_session_handle);
http://www.php.net/manual/ja/oauth.getaccesstoken.php
AccessTokenの取得の際に、oauth_session_handleってのを受け取っているのですが、その値を2個目のパラメータに指定すると、AccessTokenの更新リクエストが簡単に送れます。
なぜこんなにY!の仕様に親切なのか?気になる方はこのへんのエントリを見ればいいかと。