PECL OAuthならひと癖あるY!JのOAuth 1.0aの実装も簡単っぽい

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のサイトにも少し書いてあります。
この辺りですね。

一番上のOAuth.phpは割と有名で私もPHPでOAuthの署名を作成する方法に関するエントリを書いてみたりもしましたが、これが一番使いやすいかと言われたらそうでもないと思う。
そこで、今日はPECLのOAuthライブラリを少し見てみます。いつか下の2つも試します。

PECLのOAuthライブラリでY!JのOAuthに挑戦

使い方は、twitter 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);

http://www.php.net/manual/ja/oauth.getrequesttoken.php

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!の仕様に親切なのか?気になる方はこのへんのエントリを見ればいいかと。

まとめ

PECL OAuth、なかなか良かったです。

  • Token取得あたりのリクエストがOAuth.phpよりもちょっと簡単に作れる
  • Access Tokenの更新も既存の関数で実行可能!

Y!Jの中の人、これ、パートナー企業の人にお勧めできるかもしれませんよ。

次こそOAuth 2.0の話を書く予定・・・