KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

OAuth1 認証 リクエストトークン発行まで


こんにちは、松野です。

今日はOAuthの勉強をしたいと思います。

OAuthを簡単にざっくり説明すると
GoogleやYahoo、TwitterやFacebookなどに認証をしてもらい、
使う側ではユーザIDとパスワードを意識しなくてもよくなる仕組みのことです。

CodeIQなんかも、TwitterやFacebookのOAuthを使ってますね。

このOAuthを使ったプログラムを書いてみましょう。
長いので何回かに分けて書きます。

まず、OAuthには1と2があり、それぞれ認証方法が違うので
まずはOAuth1(今回はTwitterを使用)からやっていきたいと思います。
TwitterのOAuthを使うにはTwitter4Jを使うのが一番手っ取り早いですが、今回はあえて使わずにいきます。

まず、OAuth1使用するのに必要なのは
アプリのConsumerKeyとConsumerSecretです。

それを取得するために、下記アドレスからTwitterのアプリ登録をしてください。

https://apps.twitter.com/
※アプリ登録まで解説するとかなり時間かかりそうなので、各自ググってください。

アプリ登録をしたら、このような画面が出ると思います。

matsuno_201503

このConsumerKeyとConsumerSecretを使って、まずはリクエストトークンを取得します。
下記URLに、下記値をPOSTしますが、その前にひとつやることがあります。
※この際に、パラメータの順番が変わるとTwitter側が読めなくてエラーになるみたいです。。。

取得用URL   https://api.twitter.com/oauth/request_token
oauth_consumer_key=コンシュマーキー
oauth_nonce=ランダムな文字列
oauth_signature_method=HMAC-SHA1
oauth_timestamp=10桁の時間(Javaの場合はLong.toString(new Date().getTime()).substring(0, 10); で取得可能)
oauth_version=1.1

まず、取得用URLをURLエンコードします。
https%3a%2f%2fapi%2etwitter%2ecom%2foauth%2frequest_token
そしてパラメータをすべて&でつなげてURLEncodeしてください。(&はエンコードすると%26になります)
oauth_consumer_key%3dコンシュマーキー%26oauth_nonce%3dランダムな文字列%26oauth_signature_method%3dHMAC-SHA1%26oauth_timestamp%3d10桁の時間%26oauth_version%3d1.1
最後に、文字列 POST とエンコード済み取得用URLとエンコード済みパラメータを&でつなげます。
POST&https%3a%2f%2fapi%2etwitter%2ecom%2foauth%2frequest_token&oauth_consumer_key%3dコンシュマーキー%26oauth_nonce%3dランダムな文字列%26oauth_signature_method%3dHMAC-SHA1%26oauth_timestamp%3d10桁の時間%26oauth_version%3d1.1
この値をConsumerSecret + “&” を使いHmacSHA1で暗号化して、Base64エンコードしたものをsignatureパラメータとしてPOSTします。

この時点で送信する値は
取得用URL   https://api.twitter.com/oauth/request_token
oauth_consumer_key=コンシュマーキー
oauth_nonce=ランダムな文字列
oauth_signature_method=HMAC-SHA1
oauth_timestamp=10桁の時間(Javaの場合はLong.toString(new Date().getTime()).substring(0, 10); で取得可能)
oauth_version=1.1
oauth_signature=上記で作成したbase64エンコード済みsigunature

この値を送れば、リクエストトークンが取得できるので、
http://api.twitter.com/oauth/authorize&oauth_token=取得したリクエストトークン
にリダイレクトさせれば、認証画面に飛ばせます。

とりあえず今回は認証画面を出すところまでやりました。

次回は、そこからユーザIDを取得する方法をやりますので乞うご期待!

【関連記事】
ハニーポットについて (1)サーバーを立てる
ハニーポットについて (2)アクセスログ有効活用方法
TopCoderをやろう!
TopCoderをやろう 等差数列の問題
今月はTopcoderじゃなくてCodeIQ!
俺googleのページランクのアルゴリズム知ってるんだぜ!
サメの種類と生態
プログラマならできて当たり前、fizzbuzz問題