しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Twitter API と OAuth の実装 (1)

ようやくあまり実装したくない OAuth に手を付けることにしました、しばやんです。「何で OAuthBase.cs とか使わないんだ、車輪の再発明乙」と言われそうですが、何でも自分で作って仕組みを理解したくなる人間なのです。

もう Twitter の OAuth サポートはベータ段階で、Basic 認証なんて deprecated だぜと言われる日もそう遠くないでしょう。そろそろ Twitter クライアント作っている方は OAuth の準備をしておいたほうがきっと幸せになれます。

Twitter に登録する

Twitter で OAuth を使うには http://twitter.com/oauth_clients/ にアクセスしてアプリケーション・サービスを登録しないとダメです。

登録するとコンシューマキーとコンシューマシークレットが発行されます。それの 2 つを使って認証を進めていくので無いと始まりません。ちなみにコンシューマキーはリクエスト毎に、コンシューマシークレットは HMAC-SHA1 と PLAINTEXT の共有鍵として使います。

OAuth の基本

さて、簡単に OAuth 認証の流れをまとめておきます。

  1. リクエストトークン取得
  2. リクエストトークンをユーザが承認
  3. アクセストークン取得
  4. アクセストークン使って API にアクセス

簡単すぎてわかりませんか、わかりませんよね。とりあえずリクエストトークンとアクセストークンを覚えておけば大丈夫。トークンと書いていますが、実際にはトークンシークレットってやつも一緒に返されるので保存しておきます。

目的はアクセストークン(とシークレット)を取得することです。リクエストトークンではないので気をつけてください。

OAuth のパラメータ

パラメータ名と値は UTF-8 に変換してから、パーセントエンコーディングしないとダメです。しかもエンコードの結果が大文字じゃないとダメだったり、小文字じゃないとダメだったりしますが、それはまた次回。

  • oauth_comsumer_key
    • 発行されたコンシューマキー
  • oauth_token
    • リクエストトークン or アクセストークン
  • oauth_signature_method
    • リクエストの署名方法
  • oauth_signature
    • リクエストの署名
  • oauth_timestamp
    • UNIX 形式のタイムスタンプ
  • oauth_nonce
    • リクエスト毎にユニークな文字列
  • oauth_version
    • OAuth のバージョンを指定する。今は 1.0 固定

oauth_consumer_key, timestamp, nonce, version は簡単なので説明無しです。とりあえずわかりやすいものから説明します。

oauth_token

リクエストトークン or アクセストークンを指定します。アクセストークンを使うのは実際に API にアクセスするときだけなので注意。

oauth_signature_method

署名に使った方法の名前を指定します。今は PLAINTEXT・HMAC-SHA1・RSA-SHA1 が規定されていますが、たいていは HMAC-SHA1 を使います。PLAINTEXT は通信路が暗号化されている場合のみですよ。

oauth_signature

oauth_signature_method に指定した方法で生成した、リクエストの署名を指定します。この署名の生成方法がかなりややこしいです。詳しくは次回。

次回へ続く

次回は oauth_signature の生成に付いてうだうだとまとめようかと。

参考

OAuth Core 1.0 日本語訳 : http://labs.i-revo.jp/wiki/?xtra/OAuth1.0