| URL:http://uncorrelated.no-ip.com/20100508.shtml | |
ゲリラ的 uncorrelated のウェブページJavaでOAuthを使え! Twitterの普及とともに、サード・パーティのウェブサイトやアプリケーションから、Twitterに投稿をするサービスが広まってきた。ブックマークをした時、Blogを公開したときなど、様々なイベントでTwitterに投稿を行えるようになっている。このようなマッシュ・アップは便利で楽しい反面、TwitterのIDやパスワードをサード・パーティのサービスに登録しなければいけないのが問題であった。 もし悪意のあるサービスにパスワードを登録してしまったら、Twitterのアカウントがのっとられてしまう可能性がある。Twitterに限らず、パスワード登録なしでサードパーティーとサービスを利用してもらう方法を提供するのがインターネット・サービス会社の課題であり、それに対する回答としてOAuthが策定された。このOAuthは、2006年から2007年に仕様が策定され、2009年にセキュリティー・ホールが発見・悪用され改定されて現在に至り、実用段階の仕様となっている。 さて、最近流行りのOAuthのウェブサービスを利用したい人は多々いるであろう。ところがOAuthはPHPでの利用例は山ほどあるのだが、Google CodeのOAuthのサンプルコードや、signpostなどのライブラリ群があるのにも関わらず、Javaに限ると実は十分ではない。特に、何故かコールバックを利用するウェブ・アプリケーション向けのサンプルが多く無い状況となっている。確かにコールバックさせると、処理手順が複雑になるのでサンプル・アプリケーションが複雑になるから、ちょっと説明しづらいのかも知れない。実際にcallbackさせる手順でsignpostを使ってみた所、幾つかポイントとなるところがあったのでまとめておく。 1. OAuthの状態遷移は3相認証前、認証後の2相のように思われるが、コールバックする場合は実際のところは3相である。
フェーズ2の手順を、フェーズ3で行うと不正な認証として例外が発生する。 signpostの例だと、コールバック無しでフェーズ2までしか行っていないので、文書の少なさもあって利用者は混乱するかも知れない。signpost自体はコールバック時の処理をサポートしているのだが、付属の例がキャッチアップしていないのが、ちょっと残念だ。 2. コールバックは単なるリダイレクトOAuth Providerから、OAuth Consumerに対して直接httpの接続が行われる事は無い。ローカル環境でも実行ができるので、開発はしやすい。 3. API呼び出し時の400番台のhttpステータスコードなどの処理Twitterの場合、無効なTokenとTokenSecretを用いてAPIを呼び出した場合、401番が戻る。また、規格上、無効なTokenとTokenSecretをsignpostライブラリで用いるとOAuthNotAuthorizedExceptionが発生する。この2つが発生した場合は、フェーズ1に戻って処理を行う必要がある。 上記とは別に、連続投稿とみなされる場合などで、403番のhttpステータスコードが戻る場合がある。この場合は処理はTokenとTokenSecretは有効なので、フェーズ3のままで処理を行うことができる。 4. 他のライブラリへの依存Apache commons codecは必須で、Apache HTTP Componentsは推奨となる。どちらもライセンス的には扱いやすいモノだが、設置を忘れると動かない。 まとめTwitterが流行っている間は、何でもかんでもマッシュアップするリクエストが出てくると思うので、OAuth Consumerを手軽に作れるsignpostライブラリは重宝するだろう。 Twitter以外にもGoogle Calendar APIなどもOAuthなどで、今後もOAuth対応サービスは増加すると思われる。Apache HttpComponentsにも対応している(厳密には、Java標準のHTTP APIではMultipart MIMEの関係で問題がある)など、Androidアプリケーションでの利用なども考慮されているので利用範囲は広い。 何はともあれ、手抜き手軽で便利そうなサイトを作れる可能性があるので、OAuth Providerにも、OAuthライブラリ提供者にも感謝したい。こういうプロトコルを自分で考えて実装なんて、とてもじゃないけどしていられないですヽ(´д`)ノ 参考ページ
注意
|
過去ログ |