twitterのOAuth WRAP対応が待ちきれないので自分で実装してみた Vol.1

簡単に言うと、"OAuth WRAPの仕様でtwitterのデータにアクセスできるようにしました"って感じです。
(3/8 追記:ちなみに、Web App Profileです。)
TOWRAP! URL : https://r-weblife.sakura.ne.jp/towrap/
DEMO CLIENT : http://r-weblife.sakura.ne.jp/php-towrap-client/

きっかけはこちらです。

twitterがOAuth WRAPの導入を検討しているらしいなんてことを聞きつけたので、中のひとたちより一足先に仕様にのっとって作ってみようかと。

  • AuthZ Server : 開発者にClient IDを発行したり、UserにAccess Tokenを発行/管理したり
  • Protect Resource : API

OAuth WRAPの仕様にのっとったエントリポイント一覧はこちらです。

APIアクセスもできないとねってことで、OAuth WRAP形式のリクエストを内部でOAuthのリクエストに変換してtwitter APIをたたく機能を用意しました。

このAPIは、内部でhttp://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses-home_timelineを叩いています。

しかし、私の不手際によりどうしてもAPIレスポンスが遅いので、user_idとscreen_nameだけ返すのも用意しました。

あとは、Client IDを発行/登録したりするページを作りました。

現在、フローや画面仕様をまとめたドキュメントを作成中ですが、速報?として簡単に書いておきます。
OAuth WRAPの仕様見たことあって勘のいい人はこれでだいたいは把握してもらえるはず。

■ User Authorization要求

以下のパラメータを付加したURLにUserをリダイレクトさせてください。

User Authorization URL: https://r-weblife.sakura.ne.jp/oauthwrap/v0/get_auth

リクエストパラメータ

  • wrap_client_id
  • wrap_callback
  • wrap_client_state(option)

Userは最初に、twitterまで行ってTOWRAP!に対するOAuthの同意を求められます。
純正じゃないんだからしょうがないですよね。
そのあと、TOWRAP!の同意画面が出ます。
ユーザーが同意すると、こんなレスポンスがIndirect Communicationで返されます。

成功時のレスポンスパラメータ

  • wrap_verification_code
  • wrap_client_state(option)

Access Token取得要求

Access Token URL: https://r-weblife.sakura.ne.jp/oauthwrap/v0/get_token

リクエストパラメータ(POST)

  • wrap_client_id
  • wrap_client_secret
  • wrap_verification_code
  • wrap_callback

成功時のレスポンスパラメータ

  • wrap_refresh_token
  • wrap_access_token
  • wrap_access_token_expires_in

Access Tokenの有効期限は1時間にしてます。

APIアクセス

仕様ドキュメントで"Client Calls Protected Resource Using URL Parameter"として定義されている形式のみサポートしています。
GETパラメータでAccess Tokenを指定します。

https://r-weblife.sakura.ne.jp/towrap/home_timeline.json

リクエストパラメータ(GET)

それ以外のパラメータ/レスポンスはhttp://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses-home_timelineを参照。

Access Token更新要求

Refresh Tokenを用いてAccess Tokenを更新します。

Refresh Token URL: https://r-weblife.sakura.ne.jp/oauthwrap/v0/refresh_token

リクエストパラメータ(POST)

  • wrap_client_id
  • wrap_client_secret
  • wrap_refresh_token

成功時のレスポンスパラメータ

とりあえず、今回はこの辺にして、ドキュメントがまとまったらまたシェアします。